choom -p pid -n number
choom -n number command [argument...]
不良ヒューリスティックは、どのプロセスを対象にするかを決定するために、 0 (決して kill されない) から 1000 (常に kill される) までの範囲で、 各候補のタスクに値を設定する。 現在のメモリとスワップ使用量の評価に基づいて、プロセスが確保するのに 許可されたメモリの範囲で、単位は大まかな割合に設定される。 例えば、タスクが全ての許可されたメモリを使っている場合、不良スコアは 1000 になる。 タスクが全ての許可されたメモリの半分を使っている場合、不良スコアは 500 になる。
不良スコアに含まれる追加の要素がある。 現在のメモリとスワップ使用量は、root プロセスでは 3% 差し引かれる。
「許可された」メモリの総量は、oom キラーが呼ばれるコンテキストに依存する。 確保されたタスクの CPU セットに割り当てられたメモリが使い果たされると、 許可されたメモリは、CPU セットに割り当てられたメモリを表すようになる。 メモリポリシー (mempolicy) のノードが使い果たされると、 許可されたメモリは、メモリポリシーノードのセットになる。 メモリ制限 (またはスワップ制限) に到達した場合、 許可されたメモリは、設定された制限になる。 最後に、全体システムがメモリ不足になると、許可されたメモリは、 全ての確保されたリソースを表すようになる。
不良スコアがどのタスクを kill するかを決定するかに使われる前に、 調整スコア値が不良スコアに追加される。 受け入れられる値の範囲は、-1000 から +1000 である。 oom キラーが常にあるタスクを選ぶか、全く選ばないかのいずれかに、 ユーザ空間の指向を二極化できる。 利用可能な下限値 -1000 の場合、常に不良スコアを 0 にするので、 そのタスクについて oom キラーを完全に無効化する。
調整スコアの値を +500 に設定されると、例えば、 同じシステム、CPU セット、メモリポリシー、メモリコントローラリソースを共有する 残りのタスクが、50% 以上のメモリを使うことを許可するのと大まかに同じである。 一方で、調整スコアの値を -500 に設定すると、 タスクのスコアとして考慮されたメモリを、50% 差し引くのと大まかに同じである。
Karel Zak <kzak@redhat.com>