Linux内核有一种称为OOM杀手的机制(没有内存的杀手)。此机制监视使用过多内存的进程,尤其是那些瞬间消耗大量内存的进程。为了避免内存耗尽,内核将终止进程。放下它。
你还担心服务器进程是OOM吗?只需一击即可避免
一个典型的情况是:一个突然的远程登录ssh机器,但它可以ping,表明网络没有故障,因为sshd进程被OOM杀手杀死(这种类型的多次突然死亡)。重新启动计算机并查看系统日志“/var/log/messages”后,您将看到类似于“No memory: Kill process 1865(sshd)”的错误消息。
如何防止消除重要的系统进程激活(OOM)机制?只需一个技巧就可以轻松避免。
你还担心服务器进程是OOM吗?只需一击即可避免
将“/proc/PID/oom_adj设置为-17”参数以临时禁用Linux内核的OOM机制。内核将使用特定算法计算每个进程的分数,以确定要杀死的进程。每个进程的OOM分数可以在“/proc/PID/oom_score”中找到。
治疗
1.方法1:将/proc/PID/oom_adj参数设置为-17
如何防止他们杀死mongod,你可以这样做:
(1)使用以下内容编写oomadj.sh脚本文件:
#!/bin/bash
Netstat -ntlup | grep mongod | awk'{print $ NF}'| awk -F'/''{print $(NF-1)}'|读PID时;
做
Eco -17>
/proc/$ PID/oom_adj;
DONE
(2)制定时间计划
[root @ mnkj-mongodb-01~] crontab -e
*/1 * * * * /root/oomadj.sh
你还担心服务器进程是OOM吗?只需一击即可避免
至于为什么要使用-17而不是其他值(默认值为0),这是由Linux内核定义的。检查内核源代码以了解:
以Linux-3.3.6的Linux源代码为例,路径为“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=1
Vm.panic_on_oom=1 //1表示关闭,默认值为0表示打开OOM
#sysctl -p
注意事项
注意:
Kernel-2.6.26之前的oomkiller算法不够准确,RHEL 6.x版本2.6.32解决了这个问题。
子进程从父进程继承oom_adj。
OOM不适合解决内存丢失问题。
有时,自由视图有足够的内存,但OOM仍然被激活,因为进程可以占用特殊的内存地址空间。
OOM Killer是一种非常实用的机制,可确保系统内存不会被单个进程耗尽。但是,在实际工作中,如果进程运行过多,则内存使用率会过高。还有许多其他因素,例如访问和攻击增加。
这时,我们不仅要使用OOM杀手,还要注意服务器资源的使用。我们需要一个完善的实时监控系统,能够及时检测和处理系统,以确保业务的稳定运行。
上海IT外包服务网 链接:http://www.linemore.com