Как узнать, какой именно процесс был убит OOM-убийцей?

Вопрос или проблема

Убийца OOM только что убил какой-то процесс. Я могу узнать об этом, когда значение grep oom_kill /proc/vmstat увеличится.

Как я могу узнать, какой именно процесс был убит (имя, pid, владелец и так далее) и когда именно (метка времени)?

Простой, но легкий способ узнать детали о недавнем OOM-убийстве — это выполнить grep везде (путь к логам может отличаться от дистрибутива к дистрибутиву):

sudo dmesg -T | grep -Ei 'killed process|oom.killer'
sudo grep -Ei 'killed process|oom.killer' /var/log/messages /var/log/syslog 2>/dev/null

. означает “любой символ” в регулярных выражениях для grep, поэтому он найдет строки, содержащие как “oom-killer”, так и “oom killer”.

2>/dev/null в конце необходимо для устранения ошибки “Нет такого файла или каталога”, если в вашей системе нет таких логов.

Ищите записи о событиях ОOM-убийцы в логах.

sudo grep -i "oom-killer" /var/log/messages

Результат выглядит примерно так:

kernel: [timestamp] Out of memory: Kill process [process_name] ([process_pid]), UID [user_id]/[username], VmSize:[memory_size] kB, VmRSS:[resident_memory_size] kB, MemLimit:[memory_limit] kB

Ответ или решение

Чтобы определить, какой именно процесс был убит OOM-убийцей в Linux, следует использовать несколько подходов для сбора информации об этом событии. При возникновении нехватки оперативной памяти ядро операционной системы инициирует OOM-убийцу, который завершает процессы в попытке освободить ресурсы. Вы можете легко выявить убитый процесс с помощью следующих шагов.

1. Отслеживание OOM-убийцы через систему логирования

Наиболее распространенным способом определения убитых процессов является распространение по системным логам. В зависимости от конфигурации системы логи могут находиться в различных местах. В основном полезные сведения можно найти в следующих файлах:

  • /var/log/messages
  • /var/log/syslog
  • /var/log/kern.log

Используйте команды grep для поиска записей, связанных с OOM-убийцей:

sudo dmesg -T | grep -Ei 'killed process|oom.killer'
sudo grep -Ei 'killed process|oom.killer' /var/log/messages /var/log/syslog 2>/dev/null

Эти команды помогут отфильтровать записи, в которых упоминается OOM-убийца, что позволит получить все нужные данные одновременно. Важно обратить внимание, что 2>/dev/null используется для подавления сообщений об ошибках, если в системе не существуют указанные файлы логов.

2. Анализ логов

После выполнения команд, приведенных выше, вы должны увидеть записи, которые будут выглядеть примерно так:

kernel: [timestamp] Out of memory: Kill process [process_name] ([process_pid]), UID [user_id]/[username], VmSize:[memory_size] kB, VmRSS:[resident_memory_size] kB, MemLimit:[memory_limit] kB

В этих записях содержатся следующие критически важные детали:

  • timestamp — метка времени, когда произошло событие, что позволяет определить, когда именно система не смогла выделить память и убила процесс.
  • process_name — наименование убитого процесса.
  • process_pid — идентификатор процесса, который был завершен OOM-убийцей.
  • user_id/user_name — UID и имя владельца процесса, что может помочь в дальнейшей диагностике и понимании контекста.
  • memory_size — общий размер виртуальной памяти, используемый процессом.
  • resident_memory_size — фактический объем оперативной памяти, используемой процессом.
  • memory_limit — максимальный лимит памяти, установленный для данного процесса (если установлен).

3. Использование системного мониторинга

Системы мониторинга, такие как Prometheus или Grafana, могут также помочь в отслеживании и получении уведомлений о событиях OOM. Настройка таких систем предоставляет возможность получать более детализированную информацию о потреблении ресурсов и потенциальных предупреждениях до момента срабатывания OOM-убийцы.

Заключение

Таким образом, для получения информации о процессах, убитых OOM-убийцей, следует активно использовать логи системы и инструменты для мониторинга. Регулярный анализ данных в системных логах и применение средств мониторинга могут помочь предотвратить проблемы с нехваткой памяти в будущем и улучшить стабильность системы.

Оцените материал
Добавить комментарий

Капча загружается...