Я пытаюсь настроить свою систему разработки на максимальную надежность. Я отключил подкачку, потому что для использования графического интерфейса это в основном делает машину безразличной таким образом, что больше не может использоваться. Тем не менее, если агрессивные приложения съедают память, некоторые механизмы, похоже, используют это, чтобы максимально эффективно использовать затраты на скорость. Операции подкачки жесткого диска не существует, но система также перестает отвечать на запросы. Поэтому я хочу позволить убийце OOM включиться до того, как система предпримет какие-либо особые усилия по увеличению памяти. Можно ли настроить убийцу OOM для работы, если, например, свободной физической памяти менее 100 МБ?
34
Ответы:
Я также боролся с этой проблемой. Я просто хочу, чтобы моя система оставалась отзывчивой, несмотря ни на что, и я предпочитаю потерять процессы, а не ждать несколько минут. Кажется, нет никакого способа добиться этого, используя ядро Oom Killer.
Однако в пространстве пользователя мы можем делать все, что захотим. Поэтому я написал ранний демон OOM ( https://github.com/rfjakob/earlyoom ), который уничтожит самый большой процесс (по RSS), когда доступная оперативная память опустится ниже 10%.
Без раннего увеличения было легко заблокировать мою машину (8 ГБ ОЗУ), запустив http://www.unrealengine.com/html5/ несколько раз. Теперь вкладки виновных в браузере убиваются до того, как вещи выходят из-под контроля.
источник
earlyoom
Сейчас я тестирую , это хорошо в первом тесте триггера. Мне просто интересно, почему это не может быть реализовано с помощью конфигурации ядра или системных инструментов.Политика ядра по умолчанию - разрешать приложениям выделять виртуальную память, пока есть свободная физическая память. Физическая память фактически не используется до тех пор, пока приложения не коснутся виртуальной памяти, которую они выделили, поэтому приложение может выделить гораздо больше памяти, чем имеет система, а затем начать касаться ее позже, в результате чего ядру не хватит памяти, и вызвать выход памяти (ООМ) убийца. Однако до того, как процесс прерывания будет завершен, он вызвал очистку дискового кэша, что заставляет систему медленно реагировать на некоторое время, пока кэш не будет заполнен.
Вы можете изменить политику по умолчанию, чтобы запретить переполнение памяти, записав значение от 2 до
/proc/sys/vm/overcommit_memory
. Значение по умолчанию/proc/sys/vm/overcommit_ratio
- 50, поэтому ядро не позволит приложениям выделять более 50% оперативной памяти + своп. Если у вас нет свопа, то ядро не позволит приложениям выделять более 50% оперативной памяти, оставляя остальные 50% свободными для кеша. Это может быть немного чрезмерно, поэтому вы можете увеличить это значение, скажем, до 85%, чтобы приложения могли выделять до 85% оперативной памяти, оставляя 15% для кэша.источник
I disabled swap, because for GUI usage it mostly renders the machine unresponsive in such a way not useable anymore.
. Он упомянул GUI, а вы предполагаете, что он запускает команду. Покупка большего объема памяти - это первое решение, использование меньшего объема памяти - это второе решение, а обеспечение нестабильной работы системы за счет использования стабильных значений по умолчанию - последнее решение. На этот вопрос не нужно отвечать буквально, поэтому я не понимаю, в чем ваша проблема, что вы должны беспокоить нас обоих в комментариях. Рэнт не помогает .../proc/meminfo
» sCommitted_AS
государств. В некоторых запущенных приложениях это значение превышает физическую память, поэтому трудно установить допустимый предел.Для меня установка vm.admin_reserve_kbytes = 262144 делает именно это. Убийца OOM вмешивается до того, как система перестает отвечать на запросы.
источник
Другие ответы имеют хорошие автоматические решения, но я считаю, что может быть полезно также включить
SysRq
ключ, когда все выходит из-под контроля. С помощьюSysRq
ключа вы будете вручную отправлять сообщения ядру, и вы сможете делать такие вещи, как безопасная перезагрузка (сSysRQ + REISUB
), даже если пользовательское пространство полностью заморожено.Чтобы разрешить ядру прослушивать запросы, установить
kernel.sysrq = 1
или включить только те функции, которые вы, вероятно, будете использовать с битовой маской (документировано здесь ). Напримерkernel.sysrq = 244
, включит все комбинации, необходимые для безопасной перезагрузки выше, а также ручной вызов убийцы OOM с помощьюSysRq + F
.источник
Надежность не достигается из-за нехватки памяти и убийцы OOM.
Неправильно организовывать вечеринку в шкафу и помещать «вычищать мой шкаф» в свой маленький плейлист.
Это может привести к непреднамеренным побочным эффектам, потому что вы не можете контролировать то, что убито.
Максимальная надежность предполагает тестирование вашей системы и ее улучшение на основе этих тестов.
Простая настройка случайных вещей никуда не приведет ...
Из-за нехватки памяти отключение подкачки не улучшит поведение , а наоборот .
Чтобы повысить надежность в этой ситуации, добавьте больше памяти, чтобы ваша система была более отзывчивой и не было случайных процессов, уничтожаемых без намерения пользователя. Вы не должны прибегать к нехватке памяти и подобному механизму, особенно в среде разработки ...
Недостаток памяти действительно приводит к отсутствию ответа независимо от того, есть ли у вас своп или нет.
Особые усилия, которые принесут больше вреда, чем пользы, как я объяснил выше. Вместо этого вы можете убить процессы, которые вам не нужны, но я думаю, вы не сможете этого сделать, поэтому OOM будет убивать процессы, которые вам нужны.
Возможно, но вы получите более высокую отдачу от инвестиций, если просто купите дополнительную память, которая на самом деле не стоит больших денег в наши дни. Учтите, что в долгосрочной перспективе вы можете ударить себя по ноге, если продолжите работать в условиях нехватки памяти. OOM похож на судебного пристава, он не помогает вам, он помогает ОС ...
источник
kill
слепо напечатанный текст .