OOM убийца не работает?

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

Предположим, что простой скрипт просто выделяет гораздо больше памяти, чем доступно в системе (например, массив с миллионами строк). Если я запускаю такой скрипт (как обычный пользователь), он просто получает всю память, пока система полностью не зависнет (работает только SysRQ REISUB).

Странная часть здесь в том, что когда компьютер зависает, индикатор жесткого диска включается и остается таким до перезагрузки компьютера, либо если у меня установлен раздел подкачки, либо нет!

Итак, мои вопросы являются:

  1. Это поведение нормально? Странно, что приложение, выполненное как обычный пользователь, может просто так сбить систему ...
  2. Есть ли способ заставить Ubuntu просто автоматически убивать эти приложения, когда они получают слишком много (или больше) памяти?

Дополнительная информация

  • Ubuntu 12.04 .3
  • Ядро 3.5.0-44
  • ОЗУ: ~ 3,7 ГБ из 4 ГБ (используется совместно с графической картой). *

    $ tail -n+1 /proc/sys/vm/overcommit_*
    ==> /proc/sys/vm/overcommit_memory <==
    0
    
    ==> /proc/sys/vm/overcommit_ratio <==
    50
    
    $ cat /proc/swaps
    Filename                Type        Size    Used    Priority
    /dev/dm-1                               partition   4194300 344696  -1
    
41
задан 9 January 2014 в 19:59

4 ответа

Из официальной /proc/sys/vm/* документации :

oom_kill_allocating_task

Это включает или отключает уничтожение задачи запуска OOM в ситуациях нехватки памяти .

Если это значение равно нулю, убийца OOM просканирует весь список задач и выберет задачу на основе эвристики для уничтожения. Обычно это выбирает мошенническую задачу, занимающуюся переполнением памяти, которая освобождает большой объем памяти при уничтожении.

Если для этого параметра установлено ненулевое значение, убийца OOM просто завершает задачу, которая вызвала состояние нехватки памяти. Это позволяет избежать дорогостоящего сканирования списка задач.

Если выбран panic_on_oom, он имеет приоритет над тем значением, которое используется в oom_kill_allocating_task.

Значением по умолчанию является 0.

Чтобы подвести итог, при установке oom_kill_allocating_task в 1 вместо сканирования вашей системы в поисках процессов для уничтожения, что является дорогой и медленной задачей, ядро ​​просто уничтожит процесс, вызвавший система, чтобы выйти из памяти.

Из моего собственного опыта, когда запускается OOM, у ядра больше не остается «силы», достаточной для такого сканирования, что делает систему полностью непригодной для использования.

Кроме того, было бы более очевидно просто убить задачу, вызвавшую проблему, поэтому я не понимаю, почему для нее установлено значение 0 по умолчанию.

Для тестирования вы можете просто записать соответствующий псевдофайл в /proc/sys/vm/, который будет отменен при следующей перезагрузке:

echo 1 | sudo tee /proc/sys/vm/oom_kill_allocating_task

Для постоянного исправления напишите следующее в /etc/sysctl.conf или в новый файл в разделе /etc/sysctl.d/ с расширением .conf (например, /etc/sysctl.d/local.conf):

vm.oom_kill_allocating_task = 1
0
ответ дан 9 January 2014 в 19:59
  • 1
    Верхний регистр K в +100K didn' t работают на меня, но строчные работы. – Sergiy Kolodyazhnyy 22 June 2015 в 00:56

Обновление: ошибка исправлена.

Ответа Терезы достаточно, чтобы обойти проблему, и он хороший.

Кроме того, я подал отчет об ошибке , потому что это определенно нарушенное поведение.

0
ответ дан 9 January 2014 в 19:59

Прежде всего, я рекомендую обновить до 13.10 (чистая установка, сохранить ваши данные).

Если вы не хотите обновлять, измените vm.swappiness на 10, и если вы обнаружите проблемы с вашей оперативной памятью, установите zRAM.

0
ответ дан 9 January 2014 в 19:59

Можно попробовать earlyoom, уничтожитель OOM, который работает в пространстве пользователя и пытается уничтожить самый большой процесс в ситуации OOM.

0
ответ дан 8 October 2019 в 19:35

Другие вопросы по тегам:

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