关于OOM-killer

OOM-killer:Out-of-Memory (OOM) Killer是一种保护机制,用于当内存严重不足时,为了系统的继续运转,内核迫不得已挑选一个进程,将其杀死,以释放内存,缓解内存不足的问题。
可以看出这种方式对进程的保护是有限的,不能完全的保护进程的运行。


OOM Killer的关闭与激活方式:
# echo "0" > /proc/sys/vm/oom-kill
# echo "1″ > /proc/sys/vm/oom-kill


在实际运营场景中,我们经常出现ssh连接不上服务器,但ping却是通的情况,这个时候很有可能是内存不够linux启动了oom-killer,系统根据一定的分数和机制来决定
随机杀掉一些程序释放物理内存(特别是我们后台需要大量共享内存而且用了mlock的程序),而sshd进程很可能就是被选中杀掉的进程,因此导致通过ssh登录不上。 
这个时候基本上swap也被耗尽, 所有能释放内存的机制内核都已经尝试了。


而ping能够通,主要是因为ping其实是内核协议栈就直接回包了,不会走到用户态,所以还能证明机器还是活着的。


 
对于每个进程都有一个oom_score的属性/proc/PID/oom_score
oom- killer 会杀死oom_score较大的进程,当oom_score为0时禁止内核杀死该进程。


还有一个/proc/PID/oom_adj
一般来说,oom_adj的值越大,该进程被系统选中终止的可能就越高,当oom_adj=-17时,oom_score将变为0。
(要对某个进程进行OOM保护的话就直接向“/proc/pid/oom_adj”中写入“-17”即可。)


所以可以通过命令 
echo 0 > /proc/PID/oom_adj 
来防止重要的进程被oom_killer杀死。


例如可以把sshd进程的oom_adj改为0 ,包括自己连接上的那个终端进程,这样你还可以执行一些运维工作。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值