メモリ集約型アプリケーションの malloc 拒否

メモリ集約型アプリケーションの malloc 拒否

mallocプロセスを終了するのではなく、OOMキラーが選択したプロセスを拒否することは可能ですか?少なくともプロセスによってメモリ不足が記録される可能性があると思います。これは終了するよりも優れています。また、問題の一部は、攻撃プロセスを終了する前にシステムが長時間(数分)応答しないことです。

制御グループが他のプロセスのメモリを確保するためのより良いツールですか?

ベストアンサー1

プロセスを開始する前に制限を設定できます。たとえば、現在のシェルの仮想(ソフト)メモリ制限を1Gに設定します。

ulimit -S 1048576

システム全体でこれらの制限を設定することもできます。たとえば、次のようになります。

  • /etc/security/limits.conf:

    *               soft    as             25165824
    *               hard    as             25165824
    
  • /etc/systemd/system.conf:

    DefaultLimitAS=25769803776
    

32Gシステムのすべてのプロセスを24Gに制限します。両方のプロセスが一緒にこのOOMの状況を引き起こす可能性がありますが、実際にはそのようなことは起こりません。

「攻撃プロセスを終了する前に長い間応答がありません」について:

  • スワップパーティションを使用しないでください。それ以外の場合は、すべてがすぐに終了します。

実際、malloc(仮想メモリ)は実際には問題になりません。 OOMは、そのメモリを使用してプロセスが開始されたときにのみ発生します。残念ながら、Linuxでは常駐メモリを制限することはできません。 「メモリのオーバーコミット」を参照してください。

おすすめ記事