OOM Killer出现了,尽管overcommit_memory被设置为2。

4
我在嵌入式Linux上运行应用程序数小时后,突然出现了OOM Killer。
我设置了overcommit_memory=2overcommit_ratio=50来引发这种情况,并捕获可能的泄漏,但是OOM Killer仍然会启动!
为了检查我的设置是否生效,我请求大块内存,当我设置overcommit_memory=2时,确实返回0。
那么,为什么OOM Killer仍然会启动,我该如何调查问题的来源?

我还使用dmalloc库进行了检查,确认我没有占用内存。malloc日志显示,不断地获取和释放相同数量的内存,即似乎没有任何问题... - leonp
我所能想到的是,也许除了malloc之外,还有其他东西在占用内存。可能是某种幕后缓冲或其他什么。ps命令对进程的内存使用情况有何说法? - Tom Zych
1
谢谢,汤姆!你成功解决了问题! 问题出在Linux的I/O缓冲控制机制上。当我们将等待缓冲区的百分比设置为10(默认值为40)时,这个问题得到了解决,现在我们已经连续运行了6天而没有出现问题。 - leonp
@leonp:为了符合stackoverflow的风格,您应该将您的答案/经验写成一个答案并标记为已接受。 - Mikko Rantalainen
1个回答

0

所以,问题得到了回答:使用sysctl调整VM的值。关键参数是overcommit_ratio和dirty_ratio。 更新:2009年后的Linux版本在字节方面具有更准确的调整,而不是百分比。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接