大容量メモリを使用しているときにLinuxが応答しない理由(OOMを実行できない)

大容量メモリを使用しているときにLinuxが応答しない理由(OOMを実行できない)

私は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 0OOM Killが正常にトリガされます(で見ることができますdmesg)。stress29800MB未満のメモリを消費するコマンド(例:)を実行すると、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カーネルは低メモリ不足を正常に処理できません。

部屋の中の象について話しましょう。 Linuxカーネルは低メモリ不足を適切に処理できません。

解決策?などの様々なデーモン(Fedora 32ではデフォルトでインストールされ、有効になっています。)これは私のお気に入りです。まだ多くがあります:

おすすめ記事