【发布时间】:2011-01-08 17:00:49
【问题描述】:
有没有办法让 OOM 杀手工作并防止 Linux 冻结?我一直在运行 Java 和 C# 应用程序,通常会使用分配的任何内存,并且(如果我理解正确的话)过度使用会导致机器死机。现在,作为临时解决方案,我补充说,
vm.overcommit_memory = 2
vm.overcommit_ratio = 10
到 /etc/sysctl.conf。
感谢任何能够解释为什么现有的 OOM 杀手不能以有保证的方式正常运行的人,只要内核用完“真实”内存就会终止进程。
编辑——许多回答都与 Michael 的“如果您遇到与 OOM 杀手相关的问题,那么您可能需要修复导致您内存不足的任何问题”类似。我认为这不是正确的解决方案。总会有有错误的应用程序,我想调整内核,这样我的整个系统就不会死机。以我目前的技术理解,这似乎不是不可能的。
【问题讨论】:
-
为了限制内存,你为什么不把overcommit限制为奇偶校验呢?
-
我的 linux 系统上的 OOM 杀手似乎按设计工作。您有多确定自己正在经历 OOM 杀手级故障?为什么你认为这是原因?您是否也考虑过垃圾收集器问题的可能性?
-
@dmckee -- 所有其他应用程序冻结。 @wallyk - 什么是“将过度使用限制为奇偶校验”?
-
问题是OOM杀手没有足够快地激活。首先,内核会丢弃所有缓存,这会使您的系统冻结。这是内核设计错误和/或发行版配置错误,应该由内核开发人员修复。不幸的是,这个问题已经存在很多年了,并且没有得到解决,因为人们坚持使用诸如“购买更多 RAM”之类的非解决方案,这显然不能解决根本问题。您可以通过在 OOM 死机 (SysRq+F) 冻结时手动运行它来更快地恢复,但这充其量只是一种解决方法。
-
最好的办法是让 Linux 修复这个错误——这可能是有史以来最烦人的 Linux 问题。它于 2007 年提交 - System freeze on high memory usage。甚至 Windows 通过显示警告用户内存不足的对话框来防止这种情况发生。
标签: linux memory linux-kernel out-of-memory