Предварительно загружение уничтожителя OOM

Это кажется, что должно быть выполнено в виртуальной машине, где можно иметь больше контроля (или просто вернуться к снимку).

4
13.04.2017, 15:36
4 ответа

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

(Каким использованием oom_killer был бы то, если этому не удается загрузиться из-за отсутствия памяти?)

7
27.01.2020, 20:46
  • 1
    , кто-то на IRC несколько дней назад сказал мне, что проблема могла состоять в том, что Уничтожитель OOM мог иметь недостаточно памяти для запуска. Если дело обстоит не так, почему я не получающий браузер (или что-то еще) уничтожен, когда моя системная память полна? Система просто замедляется как то, если я выполнил fork-бомбу (даже указатель мыши занимает секунды только для перемещения). –  peoro 08.02.2011, 16:39
  • 2
    oom уничтожитель просто пытается предположить, кто ответственен за то, что был из памяти. Вы могли настроить браузеры oomadj значение, чтобы удостовериться, что оно уничтожается oom (/proc / <pid>/oomadj). –  chris 08.02.2011, 16:49
  • 3
    хорошо, ничто не уничтожается, даже неправильный процесс, в данный момент (или по крайней мере это - то, что это, кажется, происходит. Я должен использовать oom_adj, но это не так легко (не хотите делать, что вручную любое время, я запускаю свой браузер, должен записать обертку, которая выполняет браузер и устанавливает тот параметр), особенно если браузер использует много процессов (хром)... Возможно, я должен открыть новый вопрос, спрашивающий, как сделать это. –  peoro 08.02.2011, 18:16

Ядро действительно выделяет минимальное количество свободного пространства для себя. Вы видите это значение с:

$ 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 должен иметь большую работу, чтобы сделать в хорошо настроенной среде.

6
27.01.2020, 20:46
  • 1
    Спасибо, я попытаюсь играть повышение 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.

2
27.01.2020, 20:46
  • 1
    Спасибо. Я уже попытался заменить превышать возможности переменные несколько дней назад, но это не работало хорошо: это уничтожило мое большинство приложений голода памяти, когда большая часть моей памяти была все еще бесплатной (большой частью, я имею в виду как 50%). Я думаю поэтому некоторые приложения (скажите, что Firefox), выделяют намного больше памяти, чем, что они на самом деле используют. –  peoro 08.02.2011, 16:48
  • 2
    @peoro, если Вы готовы протестировать подходящий overcommit_ratio значение, можно скорректировать систему, чтобы позволить всей RAM использоваться для реального для программ. Проблема, это потребует отношения установки более чем 100, и у Вас, как больше гарантируют, никогда не не закончится память. Единственная реальная фиксация должна была бы исправить все программы непривилегированного режима, чтобы выделить только столько же памяти по мере необходимости и затем работать с overcommit_memory = 2. –  Mikko Rantalainen 17.12.2017, 19:13

the system hangs indefinitely

Если вы хотите узнать, почему он зависает, см. ответ на аналогичный вопрос .

Если вы хотите предотвратить его зависание и просто запускать OOM -killer почти мгновенно, когда это необходимо, вы можете попробовать неуклюжий патч ядра из раздела EDITэтот вопрос(примечание :требуется перекомпиляция ядра ).

0
27.01.2020, 20:46

Теги

Похожие вопросы