Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3522841
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类: LINUX

2015-04-16 10:28:18

原文地址:OOM killer 的避免 作者:fireworks2

By fireworks2@foxmail.com

关于OOM killer,这篇文章描述的非常详尽:

和其他随意撰写的文章(不少文章都说和LowMemFree有关)不同,此文准确地指出OOM killer发生的原因以及避免的方法。这里做一个简单的小结,如果想知道详细的情况,可以阅读上面链接所指向的那篇文章。

OOM发生的原因:
  1. 虚拟内存不够用了(真实内存+Swap);通常是因为内存泄露或的确要占大内存
  2. 用户进程空间不够了;一般真实场景下遇到的并非该问题,在程序设计阶段就会考虑进程空间大小是否足够

OOM的避免:(同上面两个原因对应)
  1. 增加内存+Swap的总大小;不过对于内存泄露或虚拟内存仍然不够用时,这么做并没有作用
  2. 改用64位进程+64位系统来扩大进程空间

应用程序自己加保护来避免OOM:
  1. 可以处理上面解决办法里面无法处理的情况
  2. 操作方法是在应用程序分配内存时做出错检查,并且设置合理的系统参数,e.g.
    echo 2 >  /proc/sys/vm/overcommit_memory 
    echo 100 > /proc/sys/vm/overcommit_ratio

此时可申请的内存总量最大为(mmap共享的除外):
    CommitLimit=MemTotal*overcommit_ratio+SwapTotal


另:
还有些做法可以调整oom发生时的行为
这个文章里面也描述了oom的情况


阅读(618) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~