Вопрос: Установить настройку убийцы OOM для процесса при запуске?


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

BTW: если бы кто-нибудь мог создать тег для oom или oom-killer, это было бы неплохо.


4
2018-06-29 19:07


Источник




Ответы:


Я думаю, вам лучше всего добавить отдельный скрипт в качестве части вашего init.d. В нем вы захотите сделать что-то подобное

echo 15 > /proc/`pidof APP_NAME`/oom_adj

pidof APP_NAME будет получать идентификатор процесса приложения с этим именем. Запись 15 в / proc / {pid} / oom_adj поднимает «плохость» процесса {pid}, что делает его более вероятным убить убийцей OOM.

Статья Укрощение убийцы OOM от LWN.net также намекает на некоторые другие идеи, которые были предложены для спецификации спецификации «oom_victim», но я не уверен, что любой из них действительно находится в ядре.

BTW: Лучшим решением было бы избежать необходимости использовать OOM Killer в первую очередь. Помните неписаный девиз Micro $ oft: Нет проблем, больше не может исправить RAM.

[Примечание. Если может быть более одного из этих процессов, вы можете немного пересмотреть код.]


4
2018-06-30 13:46



Спасибо за ответ. Да, было бы неплохо, если бы я мог добавить RAM, но есть предел. И ситуация возникает редко, но я чаще это вижу с Apache, чем на других машинах с lighttpd. Поэтому я перейду на долгосрочную перспективу. Спасибо также за ссылку на статью LWN. Что касается вашей заметки в конце, я просто пойду за чем-то вроде for pid in $(pgrep APP_NAME); do echo ...; done - 0xC0000022L


Для ubuntu 15.04 это изменилось.

Правильный способ настройки oom для pid

echo 42 > /proc/666/oom_score_adj

вместо /proc/666/oom_adj


0
2018-05-04 10:46