web-dev-qa-db-ja.com

プロセス(スクリプト)がoomkillerを呼び出さないようにします

非常に残念な状況でした。微妙なエラーを含むbashスクリプトがワイルドになり、使用可能なすべてのメモリを取得してから、他のタスク(本番アプリ!)を強制終了してさらに多くのタスクを取得し始めました。

このスクリプトや他のスクリプトの将来性のある呼び出しで、メモリ制限に達したときに自分自身が落ちて他のアプリを強制終了しないようにするにはどうすればよいですか?

スクリプトのテキストに組み込むことができるものが欲しいです。

2
Imaskar

ulimit -mは、プロセスに適用可能なコア(まあ、RSS)制限を設定できるようにします。ulimit -vは、VMフットプリントに対しても同様に実行できます。

2
MadHatter

Linuxでは、 https://www.kernel.org/doc/Documentation/sysctl/vm.txt は、仮想メモリシステムのさまざまな調整可能ファイルを文書化します。

例えば、 vm.oom_kill_allocating_task=1

これがゼロ以外に設定されている場合、OOMキラーは、メモリ不足状態をトリガーしたタスクを単に強制終了します。これにより、コストのかかるタスクリストスキャンが回避されます。

本番アプリがOOMをトリガーするものにならないという保証はありません。しかし、暴走した割り当てがそれに当たる可能性が高くなります。

また、記憶のために殺害される可能性が多かれ少なかれ特定のプロセスに重みを付けるために微調整できるスコアもあります。/proc/$ PID/oom_adj。ただし、おそらくinitスクリプトで設定する必要があります。 systemd.execにはOOMScoreAdjustがあります

OOMキラーを完全に無効にすることができます。ただし、極端なメモリプレッシャーでは、システムが応答できないか、パニックになる可能性があります。

2
John Mahowald

監視対象を使用してプロセスを管理できます。スーパーバイザはメモリクォータを設定できます。

0