Почему ядро ​​Linux убивает процессы, когда у него 14 ГБ свободной памяти, и как это исправить?

Используйте xargs вместо подкоманды $ (jobs -p) , потому что, если jobs -p пусто, команда kill завершится ошибкой.

jobs -p | xargs kill
8
19.01.2017, 16:14
2 ответа

На ваши вопросы:
Почему: вы, вероятно, используете ядро ​​4.4.0-59. В таком случае вы столкнулись с ошибкой OOM: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1655842 .
Как это исправить, если это снова повторится: понизьте версию ядра до, например. 4.4.0-57.

3
27.01.2020, 20:13

Причиной того, что ваша система завершает процесс, является фрагментация памяти. Однако у вас не было 14 ГБ свободной оперативной памяти, а было около 70 МБ, когда это произошло.

Интересные строки в логе следующие:

[ 2687.946164] Xorg invoked oom-killer: gfp_mask=0x24040c0, order=3, oom_score_adj=0

[ 2687.946424] Node 0 Normal: 10812*4kB (ME) 2620*8kB (UM) 72*16kB (M) 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 1*4096kB (H) = 69456kB

Первая строка с order=3говорит о том, что размер этого выделения составляет 32 КБ (значение вычисляется page_size * 2^orderили 4096*2*2*2 = 32768байт.

Вторая строка говорит о том, что в системе было 0 свободных страниц такого размера. Самые большие фрагменты памяти, которые были свободны, составляли блоки размером 16 КБ, а у вас было только 72 из них.

Значение gfp_maskдолжно быть декодировано с использованием значений вhttps://github.com/torvalds/linux/blob/master/include/linux/gfp.h

Однако, насколько я понимаю, поскольку этот запрос имел ___GFP_RETRY_MAYFAILустановку, ядро ​​должно было попытаться восстановить или сжать память и повторить попытку вместо запуска OOM Killer. Это может быть ошибка ядра в версии ядра, которая использовалась, когда это произошло. Или ваша версия ядра была скомпилирована с отключенным сжатием памяти.

Создание задания cron, которое периодически запускает echo 1 > /proc/sys/vm/compact_memoryкак rootв качестве обходного пути, может помочь избежать этой проблемы, если ваше ядро ​​​​не может автоматически сжимать память. Однако это приведет к некоторой дополнительной нагрузке на ЦП, поэтому его не следует запускать, если вместо этого вы обновите ядро.

0
22.08.2021, 20:51

Теги

Похожие вопросы