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。

你修改了你的swappiness嗎? (核心使用交換的容易程度。) cat /proc/sys/vm/swappiness ?

您也可以研究調整 vm.dirty_ratio 或 vm.lower_zone_protection = 100。

您捕獲了內核恐慌嗎? (串行控制台通常是執行此操作的好方法)

您也可以嘗試使用自己的進程監控軟體來搶佔 OOM-Killer。 (看看莫尼特)

祝你好運

答案2

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1002704

執行 Oracle/Java 的 RHEL4 虛擬機器透過 OOM Killer 隨機終止進程 詳細資訊 OOM Killer 會終止應用程序,即使 ESX 沒有記憶體負載。命令 top 顯示大量記憶體正在緩存,並且交換幾乎沒有被使用。解決方案

當要複製的資料大小超過實體記憶體大小時,oom-killer 開始隨機殺死進程。

這可以透過運行來修復:

sysctl -w vm.lower_zone_protection 100

當 lower_zone_protection 設定為 100 時,它將空閒頁面閾值增加 100,從而更早開始頁面回收並防止 NFS(網路檔案系統)遠遠落後於核心的記憶體需求。這會導致頁面回收更快發生,從而為區域提供更多「保護」。 Redhat 在 RHEL 中發現了這個問題,並在以下文章中提供了解決方法:

相關內容