我们使用 Nagios 来监控我们的服务器。现在.. linux 使用了我们提供给它们的所有 RAM,因此无法检测我们是否即将耗尽内存。由于内存使用过多,我们有几次服务器崩溃。
有什么方法可以检测 ubuntu(linux) 是否启动了 OOM 杀手?我知道它写在日志文件中但是无论如何都可以检测它何时启动?
/RJ
我们使用 Nagios 来监控我们的服务器。现在.. linux 使用了我们提供给它们的所有 RAM,因此无法检测我们是否即将耗尽内存。由于内存使用过多,我们有几次服务器崩溃。
有什么方法可以检测 ubuntu(linux) 是否启动了 OOM 杀手?我知道它写在日志文件中但是无论如何都可以检测它何时启动?
/RJ
也许通过logtail。
oom-killer 在 syslog 和 dmesg 中留下了运行的痕迹。您可以放置一个 cron 作业或脚本,通过一些“logtails”系统日志的监控工具来调用,并在运行之间出现如下所示的行时警告您
dmesg 不是“logtailable”,但
dmesg -c
会在打印后清除 dmesg 缓冲区,因此脚本可以简单地调用dmesg -c | grep <string> | wc -l
1 或更大的值意味着自 las 运行/启动以来调用了 oom-killer。但这会破坏您的 dmesg 存储信息。您看不到 OOM 何时过去,唯一的方法是检查日志并希望它在那里(有时它不会被记录)。
有一些工具可以用 Nagios 检查内存使用情况,我个人使用check_mem.pl
创建/etc/rsyslog.d/30-oom-killer.conf如下:
将/var/log/oom-killer.log添加到/etc/logrotate.d/rsyslog。
显然,当您没有足够的可用虚拟内存并且应用程序从内核请求内存区域时,它就会启动。所以你真正应该监控的是你的可用内存大小。平均负载也是一个需要监控的对象,因为当没有足够的可用内存时它总是会变高。