关于OOM Killer的proc文件系统
下面开始介绍与OOM Killer相关的proc文件系统。
/proc/<PID>/oom_adj
为/proc/<PID>/oom_adj设置值就可以调整得分。调整值的范围为-16~15。正的值容易被OOM Killer选定。负值可能性较低。例如,当指定3时,得分就变为23倍;当指定-5时,得分就变为1/25。
“-17”是一个特殊的值。如果设置为-17,就会禁止OOM Killer发出的信号(从Linux 2.6.12开始支持设置-17)。
在OOM Killer运行的情况下,为了实现远程登录而想要将sshd排除在对象外时,可以执行下列命令。
cat/proc/'cat/var/run/sshd.pid'/oom_score
15
echo-17>/proc/'cat/var/run/sshd.pid'/oom_adj
tail/proc/'cat/var/run/sshd.pid'/oom_*
==>/proc/2278/oom_adj<==
-17
==>/proc/2278/oom_score<==
0/得分变成0/
从Linux 2.6.18开始可以使用/proc/<PID>/oom_adj。内容记载在Documentation/filesystems/proc.txt中。
/proc/sys/vm/panic_on_oom
将/proc/sys/vm/panic_on_oom设置为1时,在OOM Killer运行时可以不发送进程信号,而是使内核产生重大故障。
echo 1>/proc/sys/vm/panic_on_oom
/proc/sys/vm/oom_kill_allocating_task
从Linux 2.6.24开始proc文件系统就有oom_kill_allocating_task。如果对此设置除0以外的值,则促使OOM Killer运行的进程自身将接收信号。此处省略对所有进程的得分计算过程。
echo 1>/proc/sys/vm/oom_kill_allocating_task
这样就不需要参照所有进程,但是也不会考虑进程的优先级和root权限等,只发送信号。
/proc/sys/vm/oom_dump_tasks
从Linux 2.6.25开始,将oom_dump_tasks设置为除0以外的值时,在OOM Killer运行时的输出中会增加进程的列表信息。
下面为设置示例。
echo 1>/proc/sys/vm/oom_dump_tasks
列表信息显示如下,可以使用dmesg或syslog来确认。
/proc/<PID>/oom_score_adj
从Linux 2.6.36开始都安装了/proc/<PID>/oom_score_adj,此后将替换为/proc/<PID>/oom_adj。详细内容请参考Documentation/feature-removal-schedules.txt。即使当前是对/proc/<PID>/oom_adj进行的设置,在内核内部进行变换后的值也是针对/proc/<PID>/oom_score_adj设置的。
/proc/<PID>/oom_score_adj可以设置-1000~1000之间的值。设置为-1000时,该进程就被排除在OOM Killer强制终止的对象外。
在内核2.6.36以后的版本中写入oom_adj,只会输出一次如下的信息。
dmesg
……
udevd(60):/proc/60/oom_adj is deprecated, please use/proc/60/oom_score_adj
instead.
……