Предотвращение зависания системы, вызванное использованием полной физической памяти в Linux

На днях я узнал, что Linux действительно убивает процессы, если у него заканчивается память. Перед тем, как это произошло, я отключил своп с командой swapoff. Обычно, если какой-либо процесс занимает всю память из-за ошибки, скажем, утечка памяти в цикле, моя система зависала (я знаю, технически она действительно очень медленная), не убивая плохой процесс.

Как я могу это предотвратить? Никакое программное обеспечение не является совершенным, и я получаю возможность запускать плохо кодированные программы и сталкиваться с этой проблемой время от времени. Мне приходится каждый раз перезагружать систему. Это просто ограничение современных ядер? Я не могу просто отключить своп, потому что я знаю, что ядро ​​в какой-то мере использует своп, чтобы эффективно использовать физическую память, даже если физическая память просторна.

Использование меньшего размера свопа может быть вариантом (более короткое время перед OOM).

One Solution collect form web for “Предотвращение зависания системы, вызванное использованием полной физической памяти в Linux”

Ядро Out Of Memory Killer используется в качестве последнего средства. Если вы обеспечиваете достаточную память и / или свопинг для запущенных процессов, то она не будет запущена.

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

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

Решение представляет собой одно или несколько из следующих

  • Добавить физическую память
  • Добавьте еще (или некоторые) свопы. Это может быть раздел диска или файл
  • Уменьшите количество или размер выполняемых процессов
  • Исправить код в процессах с беглой памятью

Некоторые другие ссылки

  • Как убийца OOM решает, какой процесс убить первым?
  • OOM Killer

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

  • Как узнать общую память, выделенную для определенного процесса в Ubuntu?
  • найти общую память RAM и память подкачки
  • Является ли таблица файлов в файловой системе или в памяти?
  • Читает ли BIOS непосредственно загрузчик или загружает его в ОЗУ?
  • Почему разные экземпляры одной и той же программы используют разные объемы памяти?
  • Как найти размер страницы физических памятей из пользовательского пространства?
  • Есть ли способ монтировать блок памяти в качестве файловой системы в Linux?
  • Почему я пропускаю 2% моего барана
  • Понимание и настройка кеш-памяти
  • Учет «отсутствия памяти» из sysctl
  • Вопросы по внутренним ядрам Linux
  • Interesting Posts

    Линейный fragment по размеру?

    ls в славных 256 цветах

    Можете ли вы переопределить использование ядра ЦП в уже запущенном процессе?

    Исключить интерфейс обратной связи или адрес из процессов, прослушивающих «любой» адрес

    Обновление значков на рабочем столе после перемещения вручную установленной программы

    Как назначить имя группы группе без имени группы?

    Debian: экран остается черным иногда во время загрузки с Asus P8Z68-V Pro / Gen3

    Как обновить настройки пользователя / группы запущенного процесса?

    Почему существуют два последовательных процесса экрана?

    ptrace: операция не допускается при присоединении к процессу зомби

    Компиляция и установка ядра kernel.org на пользовательский том на диске

    В чем разница между «dir» и «ls»?

    CentOS: Неустранимая ошибка: вызов неопределенной функции exif_imagetype ()

    Невозможно объяснить поведение ACL

    В Xorg нет клавиатуры

    Linux и Unix - лучшая ОС в мире.