문제

이 질문은 관련이 있습니다 Java는 시작을 거부합니다. 그리고 알아 내기에 충분히 쉬워야합니다. 하지만; 내 검색은 유용한 것을 얻지 못했습니다.

기본적으로 우리는 동일한 하드웨어를 가진 다른 기계에 2 개의 32 비트 OS (Redhat & Suse)가 있습니다. 둘 다 동일한 명령 줄을 실행하는 동일한 JVM을 사용합니다. Redhat은 완벽하게 잘 작동하지만 Suse는 메모리가 충분하지 않다고보고합니다.

우리는 이것이 우리가 사용하고있는 Suse 버전의 제한인지 또는 그것이 다른 것인지 알아야합니다.

'cat /proc /version'은 우리에게 제공합니다.

Linux version 2.6.5-7.244-bigsmp (geeko@buildhost) (gcc version 3.3.3 (SuSE Linux)) #1 SMP Mon Dec 12 18:32:25 UTC 2005

'uname -a'는 두 유형의 기계에 대해 다음을 제공합니다.

UTC 2005 i686 i686 i386 GNU/Linux
도움이 되었습니까?

해결책

JVM 메모리 제한은 가장 큰 자유와 관련이 있습니다 인접한 무료 메모리의 양이 아닌 블록 사용 가능합니다. 한도는 약 1.4GB에서 비트 2.0GB 이상이며 운영 체제가 다양한 사항을 메모리에 넣는 위치에 따라 다릅니다. 나는 Redhat 또는 Suse를 메모리로로드하는 위치에 대한 세부 사항을 알지 못하지만 Suse가 RAM 중간에있는 주소에 일부 라이브러리를 매핑하는 것일 수 있습니다.

그리고 Java의 실제 메모리 사용량은 이상 XMX에 지정하는 내용. 다른 메모리 설정은 또한 힙 크기 (Permgen)에도 영향을 미칩니다. 따라서 Suse의 Perm Space는 Redhat보다 큰 기본값이있을 수 있습니다.

또한 애플리케이션의 메모리 할당 프로파일에 따라 더 작은 힙 크기와 다른 쓰레기 수집 옵션으로 도망 갈 수 있습니다. 여기에는 몇 가지 세부 사항이 있습니다 (http://java.sun.com/performance/reference/whitepapers/tuning.html)) 및 기타 장소. 예를 들어, 작고 임시 블록을 많이 할당하면 비트가 많고 오래 남은 객체가있는 경우와 다른 GC 설정을 원할 것입니다.

링크 된 질문과 관련하여 왜 Redhat을 사용하지 않습니까? 그것은 단순한 솔루션 일지 모르지만 Java Tuning 및 OS 메모리 관리의 비전 세계를 깊이 파고 들어 문제를 해결하는 것이 더 빨리 문제를 해결할 것이라고 보장합니다.

다른 팁

첫째,이 주소 공간 압력이 많을 때 32 비트 OS를 실행하는 것이 미쳤다. 64 비트 리눅스에서 64 비트 JVM으로 마이그레이션하십시오. 처음부터 의심해야 할이 문제를 이미 진단하려고 노력했던 시간이 얼마나 되었습니까? 64 비트 시스템의 더 큰 주소 공간으로 사라질 것입니까?

둘째, 모든 Linux 공급 업체 중 Red Hat은 직원에게 가장 많은 커널 엔지니어를 보유하고 있으며 Rhel 제품에서 커널을 심각하게 조정하는 것으로 잘 알려져 있습니다. 여기에는 종종 귀하와 같은 큰 워크로드를위한 패치가 포함됩니다 (음, 32 비트 시스템의 대형 워크로드이며 64 비트에는 특별한 것이 없습니다). 따라서 궁극적으로 Rhel이 다른 고객이 당신과 같은 미친 짓을하고 있으며 고객을 지원하기 위해 한 일을 통해 혜택을 받고 있기 때문입니다.

마지막으로, 32 비트 Suse 에서이 작업을 수행 할 방법을 찾으려고 노력할 것으로 생각되기 때문에 Linux는 32 비트 X86에서 다양한 주소 우주 절충을 제공한다고 지적 할 것입니다. (그러나 확실하지 않음) Suse 시스템에 다른 트레이드 오프가 선택되어 있습니다. 실행중인 커널의 구성 (종종 /boot /config ...)의 구성을 가져올 수 있다면 HighMem과 같은 설정을 비교할 수 있습니다.

몇 년 전까지 기존의 옵션은 2 : 2 분할이었습니다. 즉, 사용자 공간은 2Gib의 주소 공간으로 제한되어 있으며 프로그램이 쉬운 솔루션으로 제한되어 있으며 효율성이 높지만이 시나리오에서는 요청 된 힙을 가질 수 없습니다. 프로그램 텍스트, 스택 등을위한 공간을 남기지 않을 것입니다. 최근에는 트렌드가 3 : 1 (Windows /3GB 스위치와 유사)에 대한 것이 었습니다. 고유 한 문제를 일으 킵니다. 이것은 효과가 있을지 모르지만 매우 비좁아서 직장에서 효과가 없다면 놀라지 않을 것입니다. 마지막으로 최신 Linux 커널은 4GIB 32 비트 사용자 공간을 얻는 옵션을 제공합니다. 4GIB 32 비트 사용자 공간을 얻을 수있는 옵션이 제공됩니다. 4GIB 32 비트 사용자 공간을 얻을 수 있습니다.이 옵션은 사용자 공간과 커널 주소가 공존 할 수없는 이후 상당한 성능 비용으로 작업을 안정적으로 실행하기에 충분할 수 있습니다.

이것을 시도하려면 새로운 커널이 필요합니다. Suse가 제공 한 것을 설치할 수 있습니다 ( "PAE"옵션을 예 : 다른 사람이 선택할 수있는 것을 제공하는지 확인하십시오) 또는 자신의 지원 계약을 무효화 할 수 있습니다.

그러나 실제로 옵션 1을 사용하여 64 비트 JVM으로 전환하고 발을 올리십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top