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

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

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

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

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

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

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

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

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

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

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

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

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

  • Кто-нибудь действительно использует и извлекает выгоду из прозрачных огромных страниц?
  • найти общую память RAM и память подкачки
  • Как вы отслеживаете использование памяти в сценарии ksh93
  • CentOS 5.6 x86 64 Не вижу всей памяти
  • Войти в систему
  • Высокая память (пространство пользователя) и highmem (пространство ядра)
  • Найдите то, что занимает много памяти и не видно в `ps` или аналогичном
  • Xvfb не освобождает память
  • в чем разница между кешем страницы и кешем буфера?
  • Где идет оставшаяся память vm.overcommit_ratio?
  • bcache не работает, как ожидалось, с помощью ramdisk в качестве устройства кэширования
  • Interesting Posts

    почему lsb_release выглядит медленнее, чем программа, предназначенная для печати нескольких байтов?

    Как установить Linux на USB, который копирует себя в ОЗУ при загрузке, а затем снова сбрасывает измененные данные на USB при выключении?

    Извлечение части строк с определенным шаблоном с помощью awk, sed

    Как найти файлы с разрешениями больше, чем xxx, но игнорировать файлы с помощью SUID и SGID

    Удалить ключ не удаляет выбранные файлы

    Как мне сначала сделать символы подчеркивания ls?

    Клавиатура неправильно сконфигурирована после возобновления работы с приостановки

    «Scope.sh» отсутствует для файлового менеджера ranger

    Как ограничить диапазон портов в Ubuntu 14.04?

    лучше несколько заменить фигурные скобки

    Добавление новых столбцов в файл csv

    notify-send / notification-daemon: отключить значок в трее

    регулярное выражение nginx с proxypass

    Аутентификация OpenAM для OpenLDAP для SysAID (LDAP)

    Отключение питания USB-порта. Или отключите питание всей подсистемы USB

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