如何诊断 oom-killer 杀死进程的原因

如何诊断 oom-killer 杀死进程的原因

我有一个运行 CentOS 和 www/mail/db 的小型虚拟专用服务器,最近发生了几次 Web 服务器和 ssh 无响应的事件。

查看日志,我发现 oom-killer 已经终止了这些进程,可能是由于内存和交换空间不足。

有人能指点我如何诊断最近事件的起因吗?这可能是第一个被终止的进程吗?我还应该在哪里寻找?

答案1

不,算法没那么简单。您可以在以下位置找到更多信息:

http://linux-mm.org/OOM_Killer

如果您想跟踪内存使用情况,我建议运行如下命令:

ps -e -o pid,user,cpu,size,rss,cmd --sort -size,-rss | head

它将为您提供使用最多内存(并且可能导致 OOM 情况)的进程列表。| head如果您希望检查所有进程,请删除。

如果你把这个放在你的 cron 上,每 5 分钟重复一次并将其保存到文件中。保留至少几天,这样你就可以检查之后发生了什么。

对于 ssh 等关键服务,我建议在这种情况下使用 monit 自动重启它们。如果您没有远程控制台,这可能会避免失去对机器的访问权限。

祝你好运,
若昂·米格尔·内维斯

答案2

最近我遇到了一些麻烦,因为 oom-killer 踩到的进程不一定是出了问题的进程。在尝试诊断这个问题时,我了解到了我现在最喜欢的工具之一,atop。

此实用程序就像是类固醇的顶峰。在预设的时间间隔内,它会分析系统信息。然后您可以回放它以查看发生了什么。它用蓝色突出显示 80% 以上的进程,用红色突出显示 90% 以上的进程。最有用的视图是内存使用表,显示上一时间段内分配了多少内存。这是对我帮助最大的一个。

非常棒的工具——我无法用言语来形容它。

位于性能监视器之上

答案3

关于驯服 oom-kille 的文章r 看起来特别有用。似乎您可以设置优先级以防止 oom-killer 杀死某些进程(sshd 对于 VPS 来说是个不错的选择!)

答案4

OOM 只会终止当时使用内存最多的进程。不一定是超出限制或导致 OOm 调用激增的进程。
此外,Linux 的内存分配也很松懈。也就是说,如果您的进程需要 5GB 但只使用了 3GB,Linux 会让另一个进程使用它未使用的 2GB。性能>可靠性。那么当 p1 需要全部 5GB 时,它无法获得它

不是专家。只是自己处理这个问题,以及我发现的

相关内容