我们使用 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 -l
1 或更大的值意味着自上次运行/启动以来调用了 oom-killer。但这会破坏您的 dmesg 存储的信息。
答案4
显然,当您没有足够的可用虚拟内存并且应用程序向内核请求内存区域时,它就会启动。因此,您真正应该监视的是您的可用内存大小。平均负载也是一个需要监视的主题,因为当没有足够的可用内存时,平均负载总是会很高。