Возможно ли заставить убийцу ООМ вмешаться раньше?

Я пытаюсь настроить свою систему разработки на максимальную надежность. У меня своп отключен, поскольку для использования GUI он в основном делает машина не отвечает так не пойдет больше. Тем не менее, если агрессивные приложения съедают память, некоторые механизмы, похоже, начинают использовать ее по максимуму за счет скорости. Нет операции подкачки жесткого диска, но система также перестает отвечать на запросы. Поэтому я хочу, чтобы убийца OOM ударил, прежде чем система предпримет какие-либо особые усилия на увеличение памяти. Можно ли настроить OOM killer для работы, если, например, имеется менее 100 МБ свободной физической памяти?

5
задан dronus
14.03.2023 14:17 Количество просмотров материала 3255
Распечатать страницу

5 ответов

Я также боролся с этой проблемой. Я просто хочу, чтобы моя система оставалась отзывчивой, несмотря ни на что, и я предпочитаю потерять процессы, чтобы подождать несколько минут. Кажется, нет никакого способа достичь этого, используя kernel oom killer.

однако в пользовательском пространстве мы можем делать все, что захотим. Поэтому я написал ранний Демон OOM ( https://github.com/rfjakob/earlyoom ), что убьет крупнейший процесса (по RSS), когда оперативной памяти становится меньше 10%.

без earlyoom, было легко запереть мою машину (8 ГБ оперативной памяти), запустив http://www.unrealengine.com/html5/ несколько раз. Теперь, виновные вкладки браузера убивают, прежде чем все выйдет из-под контроля.

32
отвечен Jakob 2023-03-15 22:05

политика ядра по умолчанию разрешает приложениям выделять виртуальную память до тех пор, пока есть свободная физическая память. Физическая память фактически не используется до тех пор, пока приложения не коснутся виртуальной памяти, которую они выделили, поэтому приложение может выделить гораздо больше памяти, чем система, а затем начать прикасаться к ней позже, в результате чего ядро исчерпает память и вызовет убийцу нехватки памяти (OOM). Прежде чем процесс hogging убит однако, он причинял дисковый кэш должен быть очищен, что делает систему медленно реагировать на некоторое время, пока кэш не заполнится.

Вы можете изменить политику, чтобы запретить перерасход памяти, записав значение 2 /proc/sys/vm/overcommit_memory. Значение по умолчанию /proc/sys/vm/overcommit_ratio 50, поэтому ядро не позволит приложениям выделять более 50% ОЗУ+своп. Если у вас нет подкачки, то ядро не позволит приложениям выделять более 50% оперативной памяти, оставляя остальные 50% свободными для кэша. Это может быть немного чрезмерно, так что вы можете увеличить это значение, скажем, 85% или около того, так что приложения могут выделить до 85% оперативной памяти, оставляя 15% для кэша.

10
отвечен psusi 2023-03-16 00:22

для меня настройка vm.admin_reserve_kbytes=262144 делает именно это. Intervents убийца ООМ, прежде чем система полностью не отвечает.

7
отвечен Michael Vigovsky 2023-03-16 02:39

другие ответы имеют хорошие автоматические решения, но я считаю, что может быть полезно также включить SysRq ключ для Когда вещи выходят из-под контроля. С SysRq ключ, вы бы вручную сообщениями ядра, и вы можете делать такие вещи, как безопасной перезагрузки (с SysRQ + REISUB) даже если пользовательское полностью заморожены.

чтобы разрешить ядру прослушивать запросы, установите kernel.sysrq = 1, или включить только те функции, которые вы, вероятно, будете использовать с битовой маской (документировано здесь). Для пример kernel.sysrq = 244 позволит все комбо, необходимые для безопасной перезагрузки выше, а также ручной вызов убийцы OOM с SysRq + F.

1
отвечен Alpha3031 2023-03-16 04:56

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

неправильно устраивать вечеринку в шкафу и размещать "чистка моего шкафа" в вашем маленьком плейлисте.

возможно ли сделать интервенцию убийцы OOM раньше?

делать это будет иметь непреднамеренные побочные результаты, потому что у вас нет контроля над тем, что убито.

Я пытаюсь настроить свою разработку система к максимальной надежности.

максимальная надежность тестирование системы и улучшения вашей системы на основе этих тестов.

просто настройки случайные вещи никуда вас не приведет...

у меня своп отключен, поскольку для использования GUI он в основном делает машина не отвечает так не пойдет больше. Тем не менее, если агрессивные приложения съедают память, некоторые механизмы, похоже, срабатывают максимально использовать его на стоимости скорости.

из-за нехватки памяти,отключение подкачки не улучшит поведение,она, напротив.

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

нет операции подкачки жесткого диска, но система также перестает отвечать на запросы.

низкие условия памяти действительно привести к unresponiveness, есть ли у вас поменять или нет.

поэтому я хочу, чтобы убийца OOM ударил, прежде чем система сделает какие-либо специальные усилия по увеличению памяти.

специальные усилия, которые принесут больше вреда, чем пользы, как я объяснил выше. Вместо этого вы можете убить процессы, которые вам не нужны, но я думаю, вы не можете этого сделать, чтобы OOM убивал процессы, которые вам нужны.

можно ли настроить OOM killer для работы, если, например, имеется менее 100 МБ свободной физической памяти?

может быть, но вы получите более высокую отдачу от инвестиций, если вы просто купите дополнительную память, которая на самом деле не стоит много в эти дни. Считайте, что вы собираетесь ударить себя в ногу на долго запустите, если вы продолжаете работать в условиях нехватки памяти. ООМ как судебный пристав, он не помогает вам, он помогает ОС...

-2
отвечен Tom Wijsman 2023-03-16 07:13

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх