Linux OOM-killer отключает проблемы

Linux OOM-killer отключает проблемы

У меня есть машина Linux без подкачки, которая имеет vm.overcommit_memory=2и vm.overcommit_ratio=100установлен. Однако эти настройки, похоже, не оказывают никакого эффекта. Некоторые недавно запущенные процессы, которые пытаются потреблять много памяти, все еще уничтожаются OOM-killer вместо того, чтобы им было отказано в выделении памяти. Это потому, что процессы, запущенные ранее sysctl -w vm.overcommit_memory=2 vm.overcommit_ratio=100(например, before /etc/sysctl.confприменяется во время загрузки), все еще могут получить доступ к своей перераспределяемой памяти и тем самым запустить OOM-killer?Можно ли (1) отключить перерасход памяти с помощью параметров ядра или (2) во время выполнения заставить ядро ​​выделить всю перерасход памяти для всех процессов?

EDIT: После просмотра соответствующей Documentation/и некоторой части исходного кода Linux (git c6fa8e6de3)(1)кажется маловероятным.

решение1

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

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

Связанный контент