OOM killer - механизм ядра Linux для освобождения памяти при исчерпании оперативной памяти за счет убийства существующего процесса
При исчерпании памяти ядро вызывает OOM killer, который выбирает по заданному набору правил один процесс и убивает его. Память, принадлежавшая этому процессу освобождается и передается в распоряжение ядра, после чего ядро предоставляет память тому процессу, для которого требовалось выделение памяти.
Наибольшие шансы стать жертвой OOM killer имеют свежезапущенные пользовательские процессы с большим объемом виртуальной памяти или имеющие большое число дочерних процессов. Наименьшему риску подвергаются давно стартовавшие системные процессы, принадлежащие пользователю root. Администратор сервера может влиять на решение OOM killer, указав заранее через procfs параметр процесса oom_adj, насколько важен этот процес и может ли он быть убит в первую очередь, или его не следует трогать. Подробнее правила выбора OOM killer и его настройка описаны в "Out of Memory: тюнинг".
OOM killer убивает процессы сигналом SIGKILL, не предоставляя им возможность корректно завершить свое выполнение (сохранить данные, вызвать другие процессы). Поэтому результат работы OOM killer часто приводит к тяжелым последствиям для системы и для данных, и является для операционной системы средством последней надежды. Срабатывание OOM killer, особенно, частое, служит признаком несбалансированной работы системы. При возникновении такой ситуации рекомендуется отнестись к ней серьезно и предпринять меры для предотвращения исчерпания памяти.
При вызове OOM killer, причина вызова, состояние памяти и информация об убитом процессе записывается в буфер сообщений ядра - выводится на консоль и сохраняется в журнал /var/log/messages. Это верно как для физических серверов, так и для виртуальных машин. Но в системе виртуализации OpenVZ/Virtuozzo детали о работе OOM killer изнутри контейнера не доступны. Можно только видеть общее число того, сколько раз OOM killer убивал процессы данного контейнера - эта информация находится в файле /proc/user_beancounters, строка oomguarpages, параметр failcnt.