范例的情形是:某天一台机器溘然 ssh 远程登录不了,但能 ping 通,解释不是网络的故障,缘故原由是 sshd 进程被 OOM killer 杀掉了(多次碰着这样的假去世状况)。重启机器后查看系统日志「/var/log/messages」会创造「Out of Memory: Kill process 1865(sshd)」类似的缺点信息。
如何防止主要的系统进程触发(OOM)机制而被杀去世呢?只须要一招,就可以轻松避免~
设置参数「/proc/PID/oom_adj为-17」,可临时关闭 Linux 内核的 OOM 机制。内核会通过特定的算法给每个进程打算一个分数来决定杀哪个进程,每个进程的 OOM 分数可以在「/proc/PID/oom_score」中找到。

2.1 方法一:设置参数/proc/PID/oom_adj为-17
如何防止mongod被杀,可以这样操作:
1、编写脚本文件oomadj.sh,内容如下:
#!/bin/bashnetstat -ntlup |grep mongod |awk '{print$NF}' |awk -F '/' '{print$(NF-1)}' |while read PID;doecho -17 >/proc/$PID/oom_adj;done
2、设置定时操持
[root@mnkj-mongodb-01 ~]crontab -e/1 /root/oomadj.sh
至于为什么用-17而不用其他数值(默认值为0),这个是由linux内核定义的,查看内核源码可知:
以 linux-3.3.6 版本的 kernel 源码为例,路径为「linux-3.6.6/include/linux/oom.h」,阅读内核源码可「oom_adj」的可调值为 15 到 -16,个中 15 最大-16 最小,-17 为禁止利用OOM。「oom_score」为 2 的 N 次方打算出来的,个中 N 便是进程的「oom_adj」值,以是「oom_score」的分数越高就越会被内核优先杀掉。
2.2 方法二:修正内核参数禁止OOM机制
# sysctl -w vm.panic_on_oom=1vm.panic_on_oom = 1 //1表示关闭,默认为0表示开启OOM# sysctl -p把稳事变
把稳:
1、Kernel-2.6.26之前版本的 oomkiller 算法不足精确,RHEL 6.x 版本的 2.6.32 可以办理这个问题。
2、子进程会继续父进程的 oom_adj。
3、OOM 不适宜于办理内存泄露(Memory leak)的问题。
4、有时 free 查看还有充足的内存,但还是会触发 OOM,是由于该进程可能占用了分外的内存地址空间。
OOM killer 是担保系统内存不被个别进程花费殆尽非常实用的机制,但是在实际事情除了进程运行过多会造成内存占用过高,还有很多其他的成分比如:访问增多、遭受攻击等...
这时我们不仅要利用好 OOM killer,更须要关注做事器的资源利用情形,须要完善的实时监控体系,能够对付系统存在问题能够及时的创造并处理,担保业务稳定运行。
企业还没有健全的监控体系?没紧要,一个 SaaS 工具搞定你!
推举大家一个运维监控工具——王教授。不仅可以接入业务的各式监控一图汇聚展示,还可以对监控的资源利用涌现的问题,以及未来风险问题以告警的形式手机关照到个人,最大几率减小了运维事件的发生。
绑定对应云账号的AcessKey即可随时查看到该账户下所有资产状况,及时提醒云资源的变革情形,例如:做事器 CPU 利用率偏高、做事器安全组设置不屈安、云数据库存在慢SQL等...
做事器 CPU 利用率偏高
云数据库存在慢查询
有须要的运维同学欢迎点击文末王教授二维码查看详情吧!
网站崩溃找不到缘故原由?平台搭建无从下手?热门技能不想后进?想要变强找不到资料?
加入[IT拯救同盟],让大牛和差错拯救你,带你装x带你飞。定期干货分享、大牛专业解答、实用IT工具优选.....
私信小编“同盟”,即可加入我们~