Мы используем Nagios для мониторинга наших серверов. Теперь .. linux использует всю оперативную память, которую мы им даем, поэтому нет никакого способа определить, скоро ли у нас закончится память. Пару раз у нас были сбои сервера из-за чрезмерного использования памяти.
Есть ли способ определить, запускает ли ubuntu (linux) убийцу OOM? Я знаю, что это записано в файлах журнала, но есть ли способ определить, когда он запускается?
/ RJ
Возможно по бревно.
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.
Создайте /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.
Вы не можете видеть, когда OOM проходит мимо, единственный способ - проверить журналы и надеяться, что он там (иногда он не записывается).
Есть инструменты для проверки использования памяти с Nagios, я лично использую check_mem.pl
Очевидно, он запускается, когда у вас недостаточно свободной виртуальной памяти, и приложение запрашивает область памяти у ядра. Итак, что вам действительно нужно контролировать, так это размер свободной памяти. И средняя загрузка также подлежит мониторингу, потому что она всегда становится высокой, когда не хватает свободной памяти.