LoginSignup
1
2

More than 5 years have passed since last update.

/proc/[pid]/oom_adjとは?

Posted at

/proc/[pid]/oom_adjとは?

oom_adjはプロセスごとに設定できる値で、これによってOOM KillerにKillされる優先度を変更できます。
Linux OOM Killerについて

子プロセスに継承される

新しいプロセスは親のoom_adjを受け継ぎます。

設定できる値の範囲

  • 1~15: 大きいほどkillされやすい
  • 0: 初期値
  • -16~-1: 小さいほどkillされづらい
  • -17: killされない

俺さん(20代♂, 会社員)の場合

  • dockerでサーバーを起動しているが、アクセス次第でメモリ消費量が増えてOOM killerが発動することがある。
  • サーバーが落ちたら再起動するスクリプト経由でサーバーを起動しているので、サーバー本体がkillされれば問題無いのだが、なぜかいつも再起動するスクリプト本体がkillされてしまう。
  • サーバー本体のoom_adjを上げてサーバー本体が先にkillされるようにした。
例1_簡単な使い方
./change_oom_adj.sh 5 ls
例2_サーバー起動スクリプト
while :
do
  ./change_oom_adj.sh 5 bundle exec unicorn_rails -c /myapp/config/unicorn.rb -E ${RAILS_ENV} -p 3000
  sleep 1
done 

oom_adj変更スクリプト

change_oom_adj.sh
#!/bin/bash

set -e

usage_exit() {
  echo "Usage: $0 [oom_adj] command" 1>&2
  exit 1
}

oom_adj=$1
shift;

number_regex='^-?[0-9]+$'
if ! [[ $oom_adj =~ $number_regex ]] ; then
  usage_exit
fi

pid=$$
echo $oom_adj > /proc/$pid/oom_adj

"$@"

参考文献

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2