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

dun*_*nxd 9 linux centos rhel5

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

查看日志,我看到 oom-killer 杀死了这些进程,可能是由于内存和交换空间不足。

谁能给我一些关于如何诊断可能导致最近发生的事件的指示?很可能是第一个进程被杀死了吗?我还应该去哪里找?

jne*_*ves 12

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

http://linux-mm.org/OOM_Killer

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

ps -e -o pid,user,cpu,size,rss,cmd --sort -size,-rss | head
Run Code Online (Sandbox Code Playgroud)

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

如果你把它放在你的 cron 上,每 5 分钟重复一次并将其保存到一个文件中。至少保留几天,以便您可以查看稍后发生的情况。

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

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


pbo*_*oin 6

我最近在这方面遇到了困难,因为 oom-killer 踩踏的过程不一定是出错的过程。在尝试诊断时,我了解了我现在最喜欢的工具之一。

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

神奇的工具——不能说太多。

在性能监视器之上