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 を先制することもできます。(Monit を参照してください)

幸運を祈ります

答え2

からhttp://kb.vmware.com/selfservice/microsites/search.do?language=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 で特定されており、次の記事で回避策が提供されています。

関連情報