Это кажется, что должно быть выполнено в виртуальной машине, где можно иметь больше контроля (или просто вернуться к снимку).
Я абсолютно уверен, что ядро резервирует некоторую память для себя, т.е. для запуска oom_killer.
(Каким использованием oom_killer был бы то, если этому не удается загрузиться из-за отсутствия памяти?)
Ядро действительно выделяет минимальное количество свободного пространства для себя. Вы видите это значение с:
$ sysctl vm.min_free_kbytes
vm.min_free_kbytes = 2842
$ cat /proc/sys/vm/min_free_kbytes
vm.min_free_kbytes = 2842
Это значение зависит от суммы RAM (512 МБ в случае выше), можно попытаться увеличить его, но я не думаю, что это решит проблему (далее будет он увеличивать шанс получения OOM'd раньше).
Уничтожитель OOM должен иметь достаточно свободной памяти для уничтожения приложений, еще это пропустило бы цель наличия одного (как chris, на который уже указывают).
Править: Так же, как заметка на полях я не думаю, что это - лучший способ решить проблему относительно программ пространства пользователя, только путем изменения параметров ядра (значения OOM). Ядро имеет лучшее знание о том, что продолжается и как обработать определенные ситуации. Вместо того, чтобы играть с теми значениями, попытайтесь решить проблемы памяти, которые генерируют программы пространства пользователя (Xorg, браузер). Кроме того, см. комментарий к mm/oom_kill.c исходному файлу, даже разработчики ядра не думают, что уничтожитель OOM должен иметь большую работу, чтобы сделать в хорошо настроенной среде.
min_free_kbytes
(хотя это уже установлено на 3 798 в моей системе). Я рекомендовал к ответу chris о том, почему я думал, что ядро не может найти, что достаточно памяти загружает Уничтожителя OOM.
– peoro
08.02.2011, 16:41
Один способ избежать этого состоял бы в том, чтобы выключить эвристику, превышают возможности обработки и устанавливают его для не чрезмерных обязательств: установите sysctl vm.overcommit_memory=2 и затем понизьте vm.overcommit_ratio. Читайте на этом в документах ядра.
Можно также быть нацелены на определенный PIDs для преференциального режима OOM путем изменения/proc/$PID/oom_adj.
overcommit_ratio
значение, можно скорректировать систему, чтобы позволить всей RAM использоваться для реального для программ. Проблема, это потребует отношения установки более чем 100, и у Вас, как больше гарантируют, никогда не не закончится память. Единственная реальная фиксация должна была бы исправить все программы непривилегированного режима, чтобы выделить только столько же памяти по мере необходимости и затем работать с overcommit_memory = 2.
– Mikko Rantalainen
17.12.2017, 19:13
the system hangs indefinitely
Если вы хотите узнать, почему он зависает, см. ответ на аналогичный вопрос .
Если вы хотите предотвратить его зависание и просто запускать OOM -killer почти мгновенно, когда это необходимо, вы можете попробовать неуклюжий патч ядра из раздела EDIT
этот вопрос(примечание :требуется перекомпиляция ядра ).
oom_adj
, но это не так легко (не хотите делать, что вручную любое время, я запускаю свой браузер, должен записать обертку, которая выполняет браузер и устанавливает тот параметр), особенно если браузер использует много процессов (хром)... Возможно, я должен открыть новый вопрос, спрашивающий, как сделать это. – peoro 08.02.2011, 18:16