加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

还在担心服务器进程被OOM?只需一招,即可避免

发布时间:2019-08-19 20:15:02 所属栏目:业界 来源:今日头条
导读:题目描写 Linux 内核有个机制叫 OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是刹时很快耗损大量内存的历程,为了防备内存耗尽而内核会把该历程杀掉。 典范的环境是:某天一台呆板溘然 ssh 长途登录不了,但能 ping 通,声名不

题目描写

Linux 内核有个机制叫 OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是刹时很快耗损大量内存的历程,为了防备内存耗尽而内核会把该历程杀掉。

还在担忧处事器历程被OOM?只需一招,即可停止

典范的环境是:某天一台呆板溘然 ssh 长途登录不了,但能 ping 通,声名不是收集的妨碍,缘故起因是 sshd 历程被 OOM killer 杀掉了(多次碰着这样的假死状况)。重启呆板后查察体系日记「/var/log/messages」会发明「Out of Memory: Kill process 1865(sshd)」相同的错误信息。

怎样防备重要的体系历程触发(OOM)机制而被杀死呢?只必要一招,就可以轻松停止。

还在担忧处事器历程被OOM?只需一招,即可停止

配置参数「/proc/PID/oom_adj为-17」,可姑且封锁 Linux 内核的 OOM 机制。内核会通过特定的算法给每个历程计较一个分数来抉择杀哪个历程,每个历程的 OOM 分数可以在「/proc/PID/oom_score」中找到。

处理赏罚步伐

1. 要领一:配置参数/proc/PID/oom_adj为-17

怎样防备mongod被杀,可以这样操纵:

(1) 编写剧本文件oomadj.sh,内容如下:

  1. #!/bin/bash 
  2. netstat -ntlup |grep mongod |awk '{print$NF}' |awk -F '/' '{print$(NF-1)}' |while read PID; 
  3. do 
  4. echo -17 >/proc/$PID/oom_adj; 
  5. done 

(2) 配置按时打算

  1. [root@mnkj-mongodb-01 ~]crontab -e 
  2. */1 * * * * /root/oomadj.sh 

还在担忧处事器历程被OOM?只需一招,即可停止

至于为什么用-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. 要领二:修改内核参数榨取OOM机制

  1. # sysctl -w vm.panic_on_oom=1 
  2. vm.panic_on_oom = 1 //1暗示封锁,默以为0暗示开启OOM 
  3. # sysctl -p 

留意事项

留意:

  • Kernel-2.6.26之前版本的 oomkiller 算法不足准确,RHEL 6.x 版本的 2.6.32 可以办理这个题目。
  • 子历程会担任父历程的 oom_adj。
  • OOM 不得当于办理内存走漏(Memory leak)的题目。
  • 偶然 free 查察尚有富裕的内存,但照旧会触发 OOM,是由于该历程也许占用了非凡的内存地点空间。

OOM killer 是担保体系内存不被个体历程耗损殆尽很是适用的机制,可是在现实事变除了历程运行过多会造成内存占用过高,尚有许多其他的身分好比:会见增多、蒙受进攻等...

这时我们不只要行使好 OOM killer,更必要存眷处事器的资源行使环境,必要完美的及时监控系统,可以或许对付体系存在题目可以或许实时的发明并处理赏罚,担保营业不变运行。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读