OOM killer
OOM (out-of-memory) killer — это компонент ядра Linux, который завершает процесс, когда в системе заканчивается память и ее невозможно освободить. Он выбирает процесс на основе его OOM score, обычно это процесс, потребляющий больше всего памяти. Журнал ядра фиксирует каждое завершение OOM killer.
1Как выбирается жертва
Каждый процесс имеет оценку в /proc/<pid>/oom_score, которая растет вместе с потреблением памяти. /proc/<pid>/oom_score_adj, со значением от -1000 до 1000, корректирует ее; -1000 означает, что процесс никогда не будет выбран.
2Поиск завершений OOM killer
Ядро записывает «Out of memory: Killed process» в свой журнал. Команды journalctl -k | grep -i oom или dmesg | grep -i oom показывают эти сообщения с именем процесса и объемом используемой им памяти.
3Предотвращение
Добавьте память или swap, ограничьте ресурсоемкие службы или установите лимиты для каждой службы с помощью параметров systemd, таких как MemoryMax=. Некоторые дистрибутивы также используют systemd-oomd, который реагирует раньше, основываясь на нагрузке на память.
Как расследовать завершение OOM killer
- Поиск в журнале ядра:
journalctl -k | grep -i -A5 'out of memory' - Запишите имя завершенного процесса и объем его памяти.
- Проверьте текущую память и swap:
free -h - Найдите самые ресурсоемкие процессы:
ps aux --sort=-rss | head - Добавьте swap или ограничьте службу, затем наблюдайте, повторится ли это снова.
Осторожно
- Установка oom_score_adj в значение -1000 для множества процессов может оставить ядро без безопасного выбора.
- Отключение защиты от перерасхода памяти (memory overcommit) без должного понимания может привести к сбоям в других местах.
Связанные статьи
- Файл подкачки в LinuxЧто такое swap, как посмотреть его состояние с помощью free и swapon, как добавить файл подкачки и на что влияет параметр vm.swappiness.
- Средняя загрузкаЧто означают три числа средней загрузки, как они соотносятся с ядрами процессора и когда высокая загрузка становится проблемой.
- journalctl и журнал systemdКак читать логи с помощью journalctl, проверять объем занимаемого журналом места и безопасно очищать его с помощью опций --vacuum.
Источники
- Страница руководства proc(5): oom_score и oom_score_adj man7.org
- Управление нехваткой памяти (kernel.org) kernel.org
Примечание: RainServer предлагает мониторинг и безопасную очистку для серверов Linux; он показывает, что будет изменено, и запрашивает подтверждение.
Последняя проверка: