Ядро 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