GNU/Linux OOM (メモリ不足) 停止 - ソリューションのアイデア

GNU/Linux OOM (メモリ不足) 停止 - ソリューションのアイデア

説明する

スワップと2 GBのRAMを持つ古いシステムを使用すると、しばしばストップが発生します。

ここにあるすべての質問と回答は、主に次の点に焦点を当てています。

  • sysctlを使用して調整vm.min_free_kbytesしますvm.swappiness
  • 他の提案された解決策はoom_scoreを調整し、OOMが機能するように祈ります。
  • zram設定(スワップ圧縮)
  • さまざまなシェルスクリプト[1]種類[2]
  • より多くのメモリなどを購入することが「推奨」されることもあります。

私はこれらの解決策が原因ではなく症状だけを解決することを発見しました。私は読書を通して学んだカーネル文書OOMが動作していても、現在は2つの「モード」で動作します。

  • ほとんどのメモリ消費プロセスを終了します(通常)。
  • または、実際にメモリ割り当てを試みた最後のプロセスであるメモリ「犯人」を終了します。

どちらのソリューションも実際に満足できません。私が下した結論は私がいいえOOMの実行でランダムまたは最後のプロセスを終了したいが、システムは実行を続けたい。何を殺すかを自分で決めたいのですが、プロセスのoom_scoreを調整しません。

質問

私が知りたい/したいことは:

  1. Neverカーネル(例:4.0+)で状況が変更/改善されましたか?
  2. Ubuntuで変更されたものはあります(カスタムパッチ?12.04+)
  3. これら2つの問題に関係なく、私は提案を歓迎します。上記のQ&Aには記載されていません。
  4. 上記の3つの問題を取り除いてください。次のように修正された独自の/bin/loginバイナリをコンパイルすることを検討しています。

    • 設定可能なメモリ量(8 MBなど)を割り当てます。
    • 設定可能なユーザースペースTUI(htopなど)をコピー/フォークします(参照これ)
    • 親プロセスはSIGTSTPを送信して子プロセスを一時停止状態にし(CPUを消費しないように)、子プロセスのfdを閉じることもできます。
    • 親は、ユーザーが適切に認証された場合にのみSIGTCONTを子に送信します。セキュリティ上の理由で閉じられている場合は、サブファイルを復元することも可能です。
    • このログイン緊急バイナリはupstart / systemdまたはすべてのinitバイナリによって実行され、必要なプロセスを終了するために高い権限で実行することもできます。

5. このアプローチは合理的に見えますか、それとも過度に過度に見えますか?一目でわかりやすいセキュリティホールがありますか?

関連情報