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脚本以在启动过程结束时更改值应解决此问题.

相关文章

文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件。特点:最新、最快、最准确。 用法:...
非交互式添加分区 方法一 添加/deb/sdb 下的分区,其实位置为1到1000M,第二个分区位置为1001至3000M,...
编译安装httpd 1 去官网下载源码包 为避免非法软件,一定要去官网下载http://www.apache.org httpd-2.4...
gdisk用法 gdisk - InteractiveGUIDpartitiontable (GPT) manipulator GPTfdisk (akagdisk) isatext-mo...
1 一定用快捷键 这里简单的说下几个常用的快捷按键。 1.1 移动光标快捷键 Crtl + a 光标回到命令行...
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径。如果test命令中列出的条件成立...