Ubuntu 如何检测 OOM killer 是否已经运行

Ubuntu 如何检测 OOM killer 是否已经运行

我们使用 Nagios 来监控我们的服务器。现在……Linux 占用了我们分配给它的所有 RAM,因此无法检测我们是否即将耗尽内存。我们曾几次遇到过由于内存使用量过大而导致的服务器崩溃。

有什么方法可以检测 ubuntu(linux) 是否启动了 OOM killer?我知道它写在日志文件中,但是有什么方法可以检测它何时启动吗?

/RJ

答案1

您无法看到 OOM 何时发生,唯一的方法是检查日志并希望它在那里(有时它不会被记录)。

有一些工具可以检查 Nagios 的内存使用情况,我个人使用检查内存

答案2

创造/etc/rsyslog.d/30-oom-killer.conf如下:

if ($msg contains [
    "oom",
    "kill"
]) then {
    /var/log/oom-killer.log
    stop
}

添加/var/log/oom-killer.log/etc/logrotate.d/rsyslog

答案3

或许日志尾

oom-killer 会在 syslog 和 dmesg 中留下运行痕迹。您可以放置​​一个 cron 作业或脚本,通过一些监控工具来调用,该工具会“记录”系统日志,并在运行之间出现类似下面的行时向您发出警告

Feb 24 13:35:29 hostname kernel: [22472693.216224] foobar:23 invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0

dmesg 不是“可日志追踪的”,但dmesg -c在打印后会清除 dmesg 缓冲区,因此脚本可以简单地调用dmesg -c | grep <string> | wc -l1 或更大的值意味着自上次运行/启动以来调用了 oom-killer。但这会破坏您的 dmesg 存储的信息。

答案4

显然,当您没有足够的可用虚拟内存并且应用程序向内核请求内存区域时,它就会启动。因此,您真正应该监视的是您的可用内存大小。平均负载也是一个需要监视的主题,因为当没有足够的可用内存时,平均负载总是会很高。

相关内容