linux – OOM杀手变得疯狂

在我们的集群上,当新进程请求太多内存时,我们有时会关闭节点.我很困惑为什么OOM杀手不仅仅是杀死了罪恶的过程.

原因是某些进程得到-17 oom_adj.这使得他们禁止OOM杀手(unkillabe!).

我可以通过以下脚本清楚地看到:

#!/bin/bash
for i in `grep -v 0 /proc/*/oom_adj | awk -F/ '{print $3}' | grep -v self`; do
  ps -p $i | grep -v CMD
done

好吧,它对sshd,udevd和dhclient有意义,但后来我看到常规用户进程也得到-17.一旦该用户进程导致OOM事件,它将永远不会被杀死.这导致OOM kiler疯狂. NFS rpc.statd,cron,碰巧不是-17的一切都将被消灭.结果节点关闭.

我有Debian 6.0(Linux 2.6.32-3-amd64).

有谁知道在哪里控制-17 oom_adj赋值行为?

可以从/etc/rc.local启动sshd和Torque mom会导致过度保护行为吗?

解决方法

它从产生它的过程中继承.如果SSH设置为-17,那么Bash将是.如果你通过Bash重新启动,你将进一步产生它.
[i-180ae177] root@migrantgeek ~ # pgrep MysqLd_safe
11395
[i-180ae177] root@migrantgeek ~ # cat /proc/11395/oom_adj 
0
[i-180ae177] root@migrantgeek ~ # for pid in `pgrep bash`; do echo -17 >  /proc/$pid/oom_adj; done
[i-180ae177] root@migrantgeek ~ # /etc/init.d/MysqLd  restart
Stopping MysqL:                                            [  OK  ]
Starting MysqL:                                            [  OK  ]
[i-180ae177] root@migrantgeek ~ # pgrep MysqLd_safe
11523
[i-180ae177] root@migrantgeek ~ # cat /proc/11523/oom_adj 
-17

编辑init脚本以在启动过程结束时更改值应解决此问题.

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...