LINUX内核中的机制OOM

【概念】

  LINUX内核中有一个机制叫做OOM killer(Out Of Memery killer)

  该机制监控内存占用过大,尤其是瞬间消耗大量内存的进程, 为了防止内存被耗尽,所以OOM killer会将它杀掉

【情景】

  某台机器某天不可以ssh登录,但是可以ping通IP ==> 说明不是网络的问题

   原因可能是sshd进程被OOM killer杀掉了(这就是假死状况)

  重启服务器后,查看日志/var/log/messages会发现Out of Memory: Kill process 1865(sshd)类似的错误信息。


【解决方法参考】

  如果是虚拟化出来的环境,可以利用vncserver进入环境,重启服务器,启动sshd服务。

【关闭OOM】

  类似ssh或者一些agent的services,是系统中一定需要存在的,那么为了防止它被OOM杀掉,就需要我们暂时去关闭OOM

       设置方法:

#需要设置什么服务,那么先利用ps去查看PID
#然后根据PID进行设置
echo -17 > /proc/$PID/oom_adj 

【注意事项】

  1.Kernel-2.6.26之前版本的oomkiller算法不够精确,RHEL 6.x版本的2.6.32可以解决这个问题。

  2.子进程会继承父进程的oom_adj。

  3.OOM不适合于解决内存泄漏(Memory leak)的问题。

  4.有时free查看还有充足的内存,但还是会触发OOM,是因为该进程可能占用了特殊的内存地址空间。

原文地址:https://www.cnblogs.com/frankielf0921/p/7671118.html