11.04では、/proc/[pid]
にはoom_score_adj
が含まれていますが、man proc
は古いoom_adj
を説明しています。これを使用する方法に関する情報をグーグルで検索できませんでした。
私が手配する必要があるのは、「pbs」または「gridengine」によって開始されたプロセスが、他のものが強制終了される前に強制終了されることです。どうやってやるの?
Unix&Linuxの 私の自身のQ&A に基づき、同様の質問に基づいています。
Stuartが his answer で非常によく指摘しているように、有効な値はoom_score_adj
の-1000から1000の範囲の整数です。 lower値、lowerになる可能性殺された。
アプリケーションを再起動すると、この値を何度も変更しなければならないのは非常に不便です。プロセスが終了すると、情報は単に失われます。 Upstart(Ubuntuのinitデーモン)には、デーモンが(再)起動するたびに設定されるようにデーモンを構成するための素晴らしいオプションがあります。
[...] をちょきちょきと切る [...]
例:
# this application is a "resource hog" oom score 1000 expect daemon respawn exec /usr/bin/leaky-app
したがって、基本的に、変更するサービスの/etc/init/myservice.conf
構成ファイルを編集して、行oom score -1000
を含めることができます。質問で話しているサービス「pbs」または「gridengine」はUpstart対応であると想定しています。それ以外の場合は、これを永続的に変更する別の方法が必要です。
Oom-killerの優先順位を付けたいプロセスを生成する起動スクリプトを変更できる場合は、起動スクリプトに次を追加します。
echo 1000 > /proc/self/oom_score_adj
値は子プロセスに継承されます。
Oom_adjまたはoom_score_adjのいずれかにhigh(ish)値を設定すると、それらが最初に強制終了されます。例えば.
echo 15 > /proc/[pid]/oom_adj
oom_adjは-16から15になり、上記のようにoom_score_adjは-1000から1000を受け入れます
コードを調べることは常に良い考えです。通常、kernel.orgの検索機能を使用していますが、現在は機能していません。 Githubも良い仕事をしています。私はこれを見つけました:
代わりに、-1000〜+1000の範囲の新しい調整パラメータ/ proc/pid/oom_score_adjが追加されます。特定のタスクがoom killに対して考慮されない一方で、他のタスクが常に考慮されるように、ヒューリスティックを分極するために使用できます。値はbadness()スコアに直接追加されるので、たとえば-500の値は、システム上の、mempolicyにバインドされた、cpuset内の、またはシステム上の他のタスクと比較して、メモリ消費の50%を割り引くことを意味します同じメモリコントローラーを共有します。