Chinaunix首页 | 论坛 | 博客
  • 博客访问: 224818
  • 博文数量: 27
  • 博客积分: 1151
  • 博客等级: 少尉
  • 技术积分: 426
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-15 19:25
文章分类
文章存档

2012年(5)

2011年(6)

2010年(16)

我的朋友

分类: LINUX

2012-09-08 10:28:54

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的情况


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