我有一个运行 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 时,它无法获得它
不是专家。只是自己处理这个问题,以及我发现的