Intereting Posts
как я могу создать проприетарные драйверы Radeon для CentOS 7? Как определить тип файловой системы / раздела bash, объединяющее расширение подстановочных знаков с расширением брекета xrandr: не удается найти режим при запуске Использование переименования для переименования верхнего регистра в нижний регистр и добавления символа запустить bash в скрипте Как создать виртуальную машину с существующего сервера PreRelease FreeBSD 8.2? Применить замену элемента внутри перечисления в регулярном выражении Perl? Windows загружается только при установке USB-устройства Как сохранить последнюю команду в файл? Как правильно использовать «полный -G»? Подсчитайте количество вхождений значения столбца в TSV-файл с AWK Как заменить определенный текст на соответствующий номер строки с помощью sed? Почему идентификаторы пользователей перерабатываются? Как использовать статус выхода в crontab

Предварительная загрузка Killer OOM

У меня нет разделов / файлов подкачки на моей машине и всего 2 ГБ ОЗУ.

Иногда случается, что память становится насыщенной каким-то процессом ( Xorg + browser + compiler + …), и система зависает бесконечно, и единственный способ ее перезагрузки (кроме жесткого сброса) – с SysRq.

Я понял, что Out Of Memory Killer не поможет мне, потому что, когда память полностью заполнена, ядро ​​не может выделить сам OOM Killer.

Есть ли способ предустановить OOM Killer, чтобы он действительно мог работать, когда память полностью заполнена?
Или можно настроить ядро ​​так, чтобы OOM Killer активировался, когда мой ${TOTAL_RAM} - 10MB полон ${TOTAL_RAM} - 10MB ?

Я уверен, что ядро ​​резервирует для себя некоторую память, то есть для запуска 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 

Это значение зависит от объема оперативной памяти (512 МБ в приведенном выше случае), вы можете попытаться увеличить его, но я не думаю, что это решит вашу проблему (в дальнейшем это увеличит вероятность получения OOM'd раньше).

У убийцы OOM должно быть достаточно свободной памяти для уничтожения приложений, иначе это пропустит цель иметь один (как уже указывал Крис).

Редактирование . Как побочная заметка, я не думаю, что это лучший способ решить проблему, связанную с программами пользовательского пространства, просто изменив параметры ядра (значения OOM). Ядро имеет лучшие знания о том, что происходит и как справляться с определенными ситуациями. Вместо того, чтобы играть с этими значениями, попытайтесь исправить проблемы с памятью, которые генерируют программы пользовательского пространства (Xorg, браузер). Также см. Комментарий к исходному файлу mm / oom_kill.c , даже разработчики ядра не считают, что убийца OOM должен много работать в хорошо сконфигурированной среде.

Один из способов избежать этого – отключить эвристическую обработку перекомпоновки и настроить ее не на превышение: установите sysctl vm.overcommit_memory = 2, а затем снимите vm.overcommit_ratio. Прочтите это в документах ядра .

Вы также можете настроить таргетинг на определенные PID для предпочтительного лечения OOM путем изменения / proc / $ PID / oom_adj.