Out of memory: Kill process 解决

Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释放内存,缓解内存不足情况,不过这种保护是有限的,不能完全的保护进程的运行。

在很多情况下,经常会看到还有剩余内存时,oom-killer依旧把进程杀死了,现象是在/var/log/messages日志文件中有如下信息: Out of Memory: Killed process [PID] [process name]. 该问题是low memory耗尽,因为内核使用low memory来跟踪所有的内存分配。 当low memory耗尽,不管high memory剩多少,oom-killer都会杀死进程,以保持系统的正常运行。

上google研究了一下, 找到了一些配置方法。记录一下,备忘。

sysctl vm.panic_on_oom=1
sysctl kernel.panic=X
echo “vm.panic_on_oom=1” >> /etc/sysctl.conf
echo “kernel.panic=X” >> /etc/sysctl.conf

上面配置可以让linux在出现 Out of memory之后重启。

echo -15 > /proc/[pid]/oom_adj
#这会让 oom 在出现 Out of memory后,尽量不去kill这个进程。

echo 10 > /proc/[pid]/oom_adj
#会优先考虑kill这个进程。

echo -17 > /proc/[pid]/oom_adj
#oom在Out of memory时, 不会kill该进程。

oom_adj的值在-16 到 +15之间,值越高被kill的优先度越高,当该值为-17时,系统将不会杀死指定pid的进程,而-16~15则会使得进程的/proc/[pid]/oom_adj值呈指数(K*2^n)形式递增,即它们被杀掉的可能性呈指数递增。针对init(进程号为1)这个进程,无论该值设为多少都不会被杀。

sysctl vm.overcommit_memory=2
echo “vm.overcommit_memory=2” >> /etc/sysctl.conf

可以完全关掉oom, 不过这并不建议,关掉后可能会出现未知的情况。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑、在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值