By fireworks2@foxmail.com
关于OOM killer,这篇文章描述的非常详尽:
和其他随意撰写的文章(不少文章都说和LowMemFree有关)不同,此文准确地指出OOM killer发生的原因以及避免的方法。这里做一个简单的小结,如果想知道详细的情况,可以阅读上面链接所指向的那篇文章。
OOM发生的原因:
- 虚拟内存不够用了(真实内存+Swap);通常是因为内存泄露或的确要占大内存
- 用户进程空间不够了;一般真实场景下遇到的并非该问题,在程序设计阶段就会考虑进程空间大小是否足够
OOM的避免:(同上面两个原因对应)
- 增加内存+Swap的总大小;不过对于内存泄露或虚拟内存仍然不够用时,这么做并没有作用
- 改用64位进程+64位系统来扩大进程空间
应用程序自己加保护来避免OOM:
- 可以处理上面解决办法里面无法处理的情况
- 操作方法是在应用程序分配内存时做出错检查,并且设置合理的系统参数,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) |