OOM-Killer, jboss 및 커널 패닉

OOM-Killer, jboss 및 커널 패닉

우리는 6GB RAM을 갖춘 VMWareEsx3.5(x64)에서 RedHat 3.4.6(x32)을 실행하고 있습니다. 몇 가지 Java 프로세스(jboss 포함)가 백그라운드에서 실행되고 있습니다.

문제는 Java 프로세스가 많은 메모리를 소비하고 때로는 OOM-killer에 의해 종료된다는 것입니다. OOM-killer가 작동하려고 할 때 여유 물리적 메모리는 100MB~200MB로 매우 낮지만 스왑은 사용되지 않습니다(99% 여유). 때로는 이로 인해 커널 패닉이 발생하기도 합니다.

  • 그렇다면 왜 스왑이 사용되지 않습니까?
  • 이 커널 패닉을 조사하는 방법은 무엇입니까?
  • 32비트 Redhat에서 6GB 메모리를 사용하고 있습니까?

감사해요

답변1

개인적으로 나는 PAE(32비트 시스템에서 4G RAM 이상)를 절대 사용하지 않을 것입니다. 실제 64비트 커널과 시스템을 실행하면 훨씬 더 나은 마일리지를 얻을 수 있습니다.

OOM은 malloc이 실패할 수 있는 경우에만 트리거되어야 합니다. (사용 가능한 스왑이 많을 때는 아님)

32비트 커널이 원인일 가능성이 높습니다. PAE는 서로 다른 메모리 영역을 사용하므로 한 영역이 다른 영역에서 malloc하는 것이 허용되지 않을 수 있습니다.

교환성을 수정하셨나요? (커널이 스왑을 얼마나 쉽게 사용할 것인가.) cat /proc/sys/vm/swappiness ?

vm.dirty_ratio 또는 vm.lower_zone_protection = 100 조정을 조사할 수도 있습니다.

커널 패닉을 포착하셨나요? (직렬 콘솔이 이 작업을 수행하는 좋은 방법인 경우가 많습니다)

자체 프로세스 모니터링 소프트웨어를 사용하여 OOM-Killer를 선점할 수도 있습니다. (Monit를 살펴보세요)

행운을 빌어 요

답변2

에서http://kb.vmware.com/selfservice/microsites/search.do?언어=en_US&cmd=displayKC&externalId=1002704

Oracle/Java를 실행하는 RHEL4 가상 머신은 OOM 킬러에 의해 프로세스를 무작위로 종료합니다. 세부 정보 OOM 킬러는 ESX에 메모리 로드가 없는 경우에도 애플리케이션을 종료합니다. top 명령은 많은 메모리가 캐시되고 있고 스왑이 거의 사용되지 않음을 보여줍니다. 해결책

복사할 데이터의 크기가 물리적 메모리의 크기를 초과하면 oom-killer는 프로세스를 무작위로 종료하기 시작합니다.

이 문제는 다음을 실행하여 해결할 수 있습니다.

sysctl -w vm.lower_zone_protection 100

lower_zone_protection이 100으로 설정되면 여유 페이지 임계값이 100씩 증가하므로 페이지 회수가 더 일찍 시작되고 NFS(네트워크 파일 시스템)가 커널의 메모리 요구량보다 크게 뒤처지는 것을 방지할 수 있습니다. 이로 인해 페이지 재확보가 더 빨리 발생하여 영역에 대한 '보호'가 강화됩니다. 이 문제는 Redhat에 의해 RHEL에서 확인되었으며 다음 문서에서 이에 대한 해결 방법을 제공했습니다.

관련 정보