Ядро Linux обрабатывает нехватку памяти

Как ядро ​​Linux справляется с нехваткой памяти?

Как мы можем доказать, что новое ядро ​​достаточно хорошо справляется с нехваткой памяти?

Есть ли какой-нибудь стандартный тест на то же самое?

1 ответ

Ядро Linux обрабатывает нехватку памяти, используя OOM(Out Of Memory) Killer, Стратегия OOM killer состоит в том, чтобы убить какой-либо процесс или процессы, чтобы позволить выделенному процессу получить необходимую ему память.

Чтобы выбрать процесс для уничтожения, OOM killer вычисляет значение с именем Badness, Затем он выбирает процесс с максимальным Бадсом, который нужно убить. Если процесс распределения был выбран, ООМ прекращает свою работу. Если был выбран какой-либо другой процесс, OOM killer можно вызывать более одного раза, если предыдущий запуск OOM killer не освободил достаточно памяти.

Процесс, который нужно убить, выбирается таким образом, чтобы

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

Мы можем настроить OOM Killer, используя /proc/sys/vm/overcommit_memory значение

0-Эвристический переполнение памяти (настройка по умолчанию)-Очевидные перерасходы адресного пространства отклоняются

1-Всегда превышать

2-Отключить overcommit -Когда для overcommit_memory задано значение 2, общая фиксация адресного пространства для системы не может превышать swap + настраиваемый процент (overcommit_ratio -default равен 50) физической памяти

Простой способ доказать, что linux обрабатывает OOM - это постоянно выделять память через malloc и устанавливать в память память до тех пор, пока процесс не исчерпает память и не будет уничтожен (отображается в dmesg).

Стандартные тесты для Out Of Memory можно найти в Linux Test Project (LTP) доступно в LTP Source Forge

Тесты доступны в ltp/testcases/kernel/mem/oom

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