Ядро будет регистрировать кучу вещей до того, как это произошло, но большинство из них, вероятно, не будут включены, в /var/log/messages
зависимости от того, как (r)syslogd
сконфигурирован ваш . Пытаться:
grep oom /var/log/*
grep total_vm /var/log/*
Первый должен появляться несколько раз, а второй только в одном или двух местах. Это файл, который вы хотите посмотреть.
Найдите оригинальную строку «Out of memory» в одном из файлов, который также содержит total_vm
. От тридцати секунд до минуты (может быть больше, может быть меньше) перед этой строкой вы найдете что-то вроде:
kernel: foobar invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Вы также должны найти таблицу где-то между этой строкой и строкой «Недостаточно памяти» с такими заголовками:
[ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
Это может не сказать вам намного больше, чем вы уже знаете, но поля:
- pid Идентификатор процесса.
- UID ID пользователя.
- tgid ID группы потоков.
- total_vm Использование виртуальной памяти (на страницах 4 КБ)
- Использование резидентной памяти rss (на страницах 4 КБ)
- nr_ptes Записи таблицы страниц
- swapents Обмен записями
- oom_score_adj Обычно 0; меньшее число указывает на то, что процесс будет менее вероятен, когда будет вызван убийца OOM.
Вы можете в основном игнорировать, nr_ptes
и swapents
хотя я считаю, что это факторы, определяющие, кого убивают. Это не обязательно процесс, использующий большую часть памяти, но, скорее всего, так и есть. Подробнее о процессе выбора смотрите здесь . По сути, процесс, который заканчивается наивысшим значением oom, убивается - это «счет», указанный в строке «Недостаточно памяти»; к сожалению, другие оценки не сообщаются, но эта таблица дает некоторые подсказки с точки зрения факторов.
Опять же, это, вероятно, не принесет большего, чем просто освещение очевидного: системе не хватило памяти, и ее mysqld
выбрали умереть, потому что ее убийство высвободит больше всего ресурсов . Это не обязательно означает, mysqld
что делает что-то не так. Вы можете взглянуть на таблицу, чтобы увидеть, что в этот момент что-то пошло не так, но не может быть никакого явного виновника: системе может не хватить памяти просто потому, что вы неправильно оценили или неправильно сконфигурировали запущенные процессы.
dmesg
?