Я пытаюсь настроить свою систему разработки на максимальную надежность. У меня своп отключен, поскольку для использования GUI он в основном делает машина не отвечает так не пойдет больше. Тем не менее, если агрессивные приложения съедают память, некоторые механизмы, похоже, начинают использовать ее по максимуму за счет скорости. Нет операции подкачки жесткого диска, но система также перестает отвечать на запросы. Поэтому я хочу, чтобы убийца OOM ударил, прежде чем система предпримет какие-либо особые усилия на увеличение памяти. Можно ли настроить OOM killer для работы, если, например, имеется менее 100 МБ свободной физической памяти?
Возможно ли заставить убийцу ООМ вмешаться раньше?
5 ответов
Я также боролся с этой проблемой. Я просто хочу, чтобы моя система оставалась отзывчивой, несмотря ни на что, и я предпочитаю потерять процессы, чтобы подождать несколько минут. Кажется, нет никакого способа достичь этого, используя kernel oom killer.
однако в пользовательском пространстве мы можем делать все, что захотим. Поэтому я написал ранний Демон OOM ( https://github.com/rfjakob/earlyoom ), что убьет крупнейший процесса (по RSS), когда оперативной памяти становится меньше 10%.
без earlyoom, было легко запереть мою машину (8 ГБ оперативной памяти), запустив http://www.unrealengine.com/html5/ несколько раз. Теперь, виновные вкладки браузера убивают, прежде чем все выйдет из-под контроля.
политика ядра по умолчанию разрешает приложениям выделять виртуальную память до тех пор, пока есть свободная физическая память. Физическая память фактически не используется до тех пор, пока приложения не коснутся виртуальной памяти, которую они выделили, поэтому приложение может выделить гораздо больше памяти, чем система, а затем начать прикасаться к ней позже, в результате чего ядро исчерпает память и вызовет убийцу нехватки памяти (OOM). Прежде чем процесс hogging убит однако, он причинял дисковый кэш должен быть очищен, что делает систему медленно реагировать на некоторое время, пока кэш не заполнится.
Вы можете изменить политику, чтобы запретить перерасход памяти, записав значение 2 /proc/sys/vm/overcommit_memory
. Значение по умолчанию /proc/sys/vm/overcommit_ratio
50, поэтому ядро не позволит приложениям выделять более 50% ОЗУ+своп. Если у вас нет подкачки, то ядро не позволит приложениям выделять более 50% оперативной памяти, оставляя остальные 50% свободными для кэша. Это может быть немного чрезмерно, так что вы можете увеличить это значение, скажем, 85% или около того, так что приложения могут выделить до 85% оперативной памяти, оставляя 15% для кэша.
для меня настройка vm.admin_reserve_kbytes=262144 делает именно это. Intervents убийца ООМ, прежде чем система полностью не отвечает.
другие ответы имеют хорошие автоматические решения, но я считаю, что может быть полезно также включить SysRq
ключ для Когда вещи выходят из-под контроля. С SysRq
ключ, вы бы вручную сообщениями ядра, и вы можете делать такие вещи, как безопасной перезагрузки (с SysRQ + REISUB
) даже если пользовательское полностью заморожены.
чтобы разрешить ядру прослушивать запросы, установите kernel.sysrq = 1
, или включить только те функции, которые вы, вероятно, будете использовать с битовой маской (документировано здесь). Для пример kernel.sysrq = 244
позволит все комбо, необходимые для безопасной перезагрузки выше, а также ручной вызов убийцы OOM с SysRq + F
.
надежность не достигается при низких условиях памяти и убийцы OOM.
неправильно устраивать вечеринку в шкафу и размещать "чистка моего шкафа" в вашем маленьком плейлисте.
возможно ли сделать интервенцию убийцы OOM раньше?
делать это будет иметь непреднамеренные побочные результаты, потому что у вас нет контроля над тем, что убито.
Я пытаюсь настроить свою разработку система к максимальной надежности.
максимальная надежность тестирование системы и улучшения вашей системы на основе этих тестов.
просто настройки случайные вещи никуда вас не приведет...
у меня своп отключен, поскольку для использования GUI он в основном делает машина не отвечает так не пойдет больше. Тем не менее, если агрессивные приложения съедают память, некоторые механизмы, похоже, срабатывают максимально использовать его на стоимости скорости.
из-за нехватки памяти,отключение подкачки не улучшит поведение,она, напротив.
чтобы повысить надежность в этой ситуации, добавьте больше памяти, чтобы ваша система была более отзывчивой, и никакие случайные процессы не были убиты без намерения пользователя. Вы не должны прибегать к условиям нехватки памяти и такому механизму, особенно не в среде разработки...
нет операции подкачки жесткого диска, но система также перестает отвечать на запросы.
низкие условия памяти действительно привести к unresponiveness, есть ли у вас поменять или нет.
поэтому я хочу, чтобы убийца OOM ударил, прежде чем система сделает какие-либо специальные усилия по увеличению памяти.
специальные усилия, которые принесут больше вреда, чем пользы, как я объяснил выше. Вместо этого вы можете убить процессы, которые вам не нужны, но я думаю, вы не можете этого сделать, чтобы OOM убивал процессы, которые вам нужны.
можно ли настроить OOM killer для работы, если, например, имеется менее 100 МБ свободной физической памяти?
может быть, но вы получите более высокую отдачу от инвестиций, если вы просто купите дополнительную память, которая на самом деле не стоит много в эти дни. Считайте, что вы собираетесь ударить себя в ногу на долго запустите, если вы продолжаете работать в условиях нехватки памяти. ООМ как судебный пристав, он не помогает вам, он помогает ОС...
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]