`
923723914
  • 浏览: 632503 次
文章分类
社区版块
存档分类
最新评论

Linux OOM-killer

 
阅读更多
前天线上出了个502错误,经排查是某开发人员写了条性感的程序吃掉了大部分内存,触发OOM-killer杀死Nginx
查看日志/var/log/messages发现类似"Out of Memory: Kill process..."错误
以前不了解OOM-killer{out of memory killer },今天碰巧放假一天,借此学习下,涨涨姿势!

OOM_killer是Linux自我保护的方式,当内存不足时不至于出现太严重问题,有点壮士断腕的意味
在kernel 2.6,内存不足将唤醒oom_killer,挑出/proc/<pid>/oom_score最大者并将之kill掉

为了保护重要进程不被oom-killer掉,我们可以:echo -17 > /proc/<pid>/oom_adj,-17表示禁用OOM
我们也可以对把整个系统的OOM给禁用掉:
sysctl -w vm.panic_on_oom=1
sysctl -p

值得注意的是,有些时候 free -m 时还有剩余内存,但还是会触发OOM-killer,可能是因为进程占用了特殊内存地址

平时我们应该留意下新进来的进程内存使用量,免得系统重要的业务进程被无辜牵连
可用 top M 查看最消耗内存的进程,但也不是进程一超过就会触发oom_killer
参数/proc/sys/vm/overcommit_memory可以控制进程对内存过量使用的应对策略
当overcommit_memory=0 允许进程轻微过量使用内存,但对于大量过载请求则不允许
当overcommit_memory=1 永远允许进程overcommit

当overcommit_memory=2 永远禁止overcommit


参考文章:
http://laoxu.blog.51cto.com/4120547/1267097
http://rdc.taobao.com/team/jm/archives/2001


By DBA_WaterBin

2013-09-28

Good Luck

分享到:
评论

相关推荐

    earlyoom:earlyoom-适用于Linux的早期OOM守护程序

    oom-killer通常在Linux用户中享有不良声誉。 这可能是Linux仅在绝对没有其他选择时才调用它的部分原因。 它将换出桌面环境,删除整个页面缓存,并在最终终止进程之前清空每个缓冲区。 至少那是我认为的做法。 我坐...

    Linux系统的OOM Killer处理机制.docx

    Linux系统的OOM Killer处理机制.docx

    MySQL OOM 系统二 OOM Killer

    前面一节重点分享了Linux的内存分配策略,基于上述的分配策略,为了规避超售的风险,Linux采了一种OOM Killer的机制,即系统可用内存(包括Swap)即将使用完之前,选择性的Kill掉一些进程以求释放一些内存

    heart_oom_protect:Erlang库可保护心脏免受Linux内核的OOM Killer的杀害

    heart_oom_protect 一个Erlang OTP库,可保护心脏免于被Linux内核的OOM Killer杀死 建造 $ rebar3 compile

    【性能】OOM原理解析:LowMemoryKiller原理

    1 概述 Android的设计理念之一,便是应用程序退出,但进程还会继续存在系统以便...Android基于Linux的系统,其实Linux有类似的内存管理策略——OOM killer,全称(Out Of Memory Killer), OOM的策略更多的是用于分配内存

    nohang:适用于Linux的复杂的低内存处理程序

    nohang软件包为Linux提供了一个高度可配置的守护程序,该守护程序能够正确地防止(OOM)并在内存不足的情况下保持系统响应速度。 该软件包还包括其他诊断工具( oom-sort , psi2log , psi-top )。 问题是什么?...

    MySQL OOM 系列三 摆脱MySQL被Kill的厄运

    前面两章,我们分析了Linux内存分配的策略以及Linux通过使用 OOM_Killer的机制解决了“超售”引起的风险,MySQL同其他的应用程序一样,在操作系统允许的范围内也是可以超售的,一般人理解,Innodb_buffer_pool必须...

    Linux 系统优化的一些建议(内核优化)

    OOM Killer 一般我们的linux服务都是混部服务的,每个程序申请的物理内存都是共享的;例如物理内存只有1g,启动2个程序各申请1g是可以的,linux通过这种过度分配的方式来达到内存的充分利用,当程序实际使用内存超出...

    protect.sh.example.gz_android开发_Unix_Linux_

    This is a set of scripts for android that sets oom_adj value of selected processes to -17. It prevents killing this processes by oom_killer:script with list of protected processes.

    Nodejs cluster报错Error [ERR_IPC_CHANNEL_CLOSED]: channel closed

    这个错误是在Master进程向子进程send消息时发现pipe已经关闭了的情况下由Master进程报出来的。 2019-12-16 14:33:02,pid-170096, Error ...经排查这个问题原因是子进程占用内存太多,触发了Linux内核的OOM Killer机制

    Linux测试加压工具auto_utilization.zip

     不建议输入100MiB以下的内存值,否则程序可能会一直将swap空间吃完,触发malloc失败,从而可能引起系统死机、崩溃、触发oom_killer等后果。  b. 单位越大分配速度越快,精确度越低,推荐使用M(m)。 ************...

Global site tag (gtag.js) - Google Analytics