ターゲットプログラムがすでに実行されているため、echo 1000 >/proc/<pid>/oom_score_adj
によって直接設定されたものは信頼できません。この場合、ターゲットプログラムがecho 1000 >/proc/<pid>/oom_score_adj
の前にOOMを引き起こした可能性があります。
oom_score_adj
はforkに継承されるため、親プロセスで目的の値を設定することにより、新しい子の初期値を設定できます。
したがって、シェルスクリプトからターゲットを開始する場合は、
echo 1000 > /proc/$$/oom_score_adj
シェルの値を1000に変更し、その後シェルによってフォークされたプロセスは、oom_score_adj
を1000に設定して開始します。
M. Kittの回答のように、親プロセスに設定する代わりに、チェーンロードツールを介して子プロセスでプログラムを実行することにより、フォーク後の子プロセスに設定することができます。次に、ターゲットプログラムをチェーンロードするだけです。
LinuxオペレーティングシステムとFreeBSD/TrueOSの両方のメカニズムを知っているnoshツールセット用のユーティリティを2016年に1つ書きました。
oom-kill-protect-1000 ターゲットプログラムいくつかの引数
--
誰かが負のOOMスコアを使用するようにそれを適応させることを決定したときのためにあります。 ☺
oom-kill-protect
。 noshツールセット。ソフトウェア。