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


24

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

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


Upstartによって管理されるサービスに対してこの変更を永続的にするには:デーモンにOOMキラー調整を永続的に設定する方法は?
gertvdijk

すでに答えです。それにリンクします。:)
gertvdijk

しかし、このサイトではありません:-)
bmargulies

回答:


13

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

スチュアートは彼の答えで非常によく指摘したように、有効な値は-1000〜1000の範囲の整数ですoom_score_adj、値殺されることになるだろうという可能性。

アプリケーションを再起動すると、この値を何度も変更しなければならないのは非常に不便です。プロセスが終了すると、情報は単に失われます。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対応であると想定しています。それ以外の場合は、これを永続的に変更する別の方法が必要です。


7

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

echo 1000 > /proc/self/oom_score_adj

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


6

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

echo 15 > /proc/[pid]/oom_adj

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


これを行うには、rootになる必要があります。sudo sh -c "echo -1000 > /proc/[PID]/oom_score_adj"
アディール14

2
実際には、ルートなしでプロセスのスコアを上げることができます(「ええ、これは完全に削除できます」)。減少(0未満)にはルートが必要です。
-Piskvor

5

コードを調べることは常に良い考えです。通常、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から


ポインターを感謝しますが、誰かが運転して、問題全体のレシピを撃つことを望んでいます。
bmargulies

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.