私はAWSで16個のCPUと32GBのメモリを備えたCentOS 7.5インスタンスを使用しています。次のコマンドを実行すると、システム全体が応答しなくなり、コマンドを実行できなくなったり、新しいSSHセッションを確立したりできないことがわかりました(しかしまだpingは可能です)。そして、OOMキラーがまったく機能しないことがわかります。システム全体が永久に停止しているようです。
stress --vm 1 --vm-bytes 29800M --vm-hang 0
ただし、より多くのメモリ(50MB)を消費すると、stress --vm 1 --vm-bytes 29850M --vm-hang 0
OOM Killが正常にトリガされます(で見ることができますdmesg
)。stress
29800MB未満のメモリを消費するコマンド(例:)を実行すると、stress --vm 1 --vm-bytes 29700M --vm-hang 0
システムが応答し(OOMシャットダウンなし)、通常どおりすべてのコマンドを実行できます。
したがって、この場合は29800MB
「魔法の数字」のようです。stress
実際よりも多くのメモリを使用するようにコマンドを実行するとOOMによってコマンドが終了し、実際よりも少ないメモリを使用するようにコマンドをstress
実行すると、それですべてが問題ありません。 29800MBのメモリのみを使用してコマンドを実行すると、stress
システム全体が応答しなくなります。また、仕様が異なるLinuxホストでも同じ動作を観察しました。たとえば、CPU 72個とRAM 144GBを搭載したCentOS 7.5インスタンスでは、「Magic Number」は「137600MB」です。
私の質問は、メモリ内の「魔法の数」を使用すると、なぜOOM Killがトリガされないのですか?
ベストアンサー1
ああ、このトピックが議論されました。
望むより:
部屋の中の象について話しましょう。 Linuxカーネルは低メモリ不足を適切に処理できません。
解決策?などの様々なデーモン朝(Fedora 32ではデフォルトでインストールされ、有効になっています。)これは私のお気に入りです。まだ多くがあります: