web-dev-qa-db-ja.com

ターゲットプログラムを実行するとき(前)に「oom_score_adj」をどのように設定しますか?

ターゲットプログラムがすでに実行されているため、echo 1000 >/proc/<pid>/oom_score_adjによって直接設定されたものは信頼できません。この場合、ターゲットプログラムがecho 1000 >/proc/<pid>/oom_score_adjの前にOOMを引き起こした可能性があります。

2
illiterate

oom_score_adjはforkに継承されるため、親プロセスで目的の値を設定することにより、新しい子の初期値を設定できます。

したがって、シェルスクリプトからターゲットを開始する場合は、

echo 1000 > /proc/$$/oom_score_adj

シェルの値を1000に変更し、その後シェルによってフォークされたプロセスは、oom_score_adjを1000に設定して開始します。

2
Stephen Kitt

M. Kittの回答のように、親プロセスに設定する代わりに、チェーンロードツールを介して子プロセスでプログラムを実行することにより、フォーク後の子プロセスに設定することができます。次に、ターゲットプログラムをチェーンロードするだけです。

LinuxオペレーティングシステムとFreeBSD/TrueOSの両方のメカニズムを知っているnoshツールセット用のユーティリティを2016年に1つ書きました。

oom-kill-protect-1000 ターゲットプログラムいくつかの引数

--誰かが負のOOMスコアを使用するようにそれを適応させることを決定したときのためにあります。 ☺

参考文献

0
JdeBP