web-dev-qa-db-ja.com

oom_score_adjを使用するにはどうすればよいですか?

11.04では、/proc/[pid]にはoom_score_adjが含まれていますが、man procは古いoom_adjを説明しています。これを使用する方法に関する情報をグーグルで検索できませんでした。

私が手配する必要があるのは、「pbs」または「gridengine」によって開始されたプロセスが、他のものが強制終了される前に強制終了されることです。どうやってやるの?

23
bmargulies

Unix&Linuxの 私の自身のQ&A に基づき、同様の質問に基づいています。

Stuartが his answer で非常によく指摘しているように、有効な値はoom_score_adjの-1000から1000の範囲の整数です。 lower値、lowerになる可能性殺された。

アプリケーションを再起動すると、この値を何度も変更しなければならないのは非常に不便です。プロセスが終了すると、情報は単に失われます。 Upstart(Ubuntuのinitデーモン)には、デーモンが(再)起動するたびに設定されるようにデーモンを構成するための素晴らしいオプションがあります。

oom score

[...] をちょきちょきと切る [...]

例:

# 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対応であると想定しています。それ以外の場合は、これを永続的に変更する別の方法が必要です。

12
gertvdijk

Oom-killerの優先順位を付けたいプロセスを生成する起動スクリプトを変更できる場合は、起動スクリプトに次を追加します。

echo 1000 > /proc/self/oom_score_adj

値は子プロセスに継承されます。

7
user1338062

Oom_adjまたはoom_score_adjのいずれかにhigh(ish)値を設定すると、それらが最初に強制終了されます。例えば.

echo 15 > /proc/[pid]/oom_adj

oom_adjは-16から15になり、上記のようにoom_score_adjは-1000から1000を受け入れます

6
Stuart

コードを調べることは常に良い考えです。通常、kernel.orgの検索機能を使用していますが、現在は機能していません。 Githubも良い仕事をしています。私はこれを見つけました:

代わりに、-1000〜+1000の範囲の新しい調整パラメータ/ proc/pid/oom_score_adjが追加されます。特定のタスクがoom killに対して考慮されない一方で、他のタスクが常に考慮されるように、ヒューリスティックを分極するために使用できます。値はbadness()スコアに直接追加されるので、たとえば-500の値は、システム上の、mempolicyにバインドされた、cpuset内の、またはシステム上の他のタスクと比較して、メモリ消費の50%を割り引くことを意味します同じメモリコントローラーを共有します。

から https://github.com/mirrors/linux-2.6/commit/a63d83f427fbce97a6cea0db2e64b0eb8435cd10#include/linux/oom.h

5
falstaff

choom になりました。

tl; dr:choom --adjust -100 myprogram

manページ に詳細があります。

1
Frederick Nord