На 11,04, /proc/[pid]
содержит oom_score_adj
, но man proc
описывает старое oom_adj
. Я погуглил неудачно для любой информации о том, как использовать это.
То, что я должен расположить, - то, что процессы, запущенные 'PBS' или 'gridengine', уничтожаются, прежде чем что-либо еще будет уничтожено. Как я могу сделать это?
На основе моих собственных Вопросов и ответов на Unix&Linux по подобному вопросу.
Как Stuart указал очень хорошо в его ответе, допустимые значения являются целыми числами в диапазоне-1000 к 1 000 для oom_score_adj
. Чем ниже значение, тем ниже шанс, что это будет уничтоженным.
Это очень неудобно для изменения этого значения много раз, после того как Вы перезапускаете приложение. Информация просто потеряна после того, как процесс завершился. Выскочка (init демон в Ubuntu), имеет хорошую опцию для этого для конфигурирования, чтобы демоны удостоверились, что она установлена каждый раз, когда ей запустили (ре):
[...] надрез [...]
Пример:
# this application is a "resource hog" oom score 1000 expect daemon respawn exec /usr/bin/leaky-app
Так, в основном можно отредактировать /etc/init/myservice.conf
конфигурационный файл для сервисов Вам нравится изменять, включать строку oom score -1000
. Я действительно предполагаю, что сервисы 'PBS' или 'gridengine', о котором Вы говорите в Вашем вопросе, являются поддерживающими Выскочку, иначе Вам будет нужен другой способ изменить это постоянно.
Изучение кода всегда является хорошей идеей. Обычно я использую поисковую функцию kernel.org, но его в настоящее время вниз. GitHub делает хорошее задание также. Я нашел это:
Вместо этого новое настраиваемое,/proc/pid/oom_score_adj, добавляется что диапазоны от-1000 до +1000. Это может использоваться для поляризации эвристики, таким образом, что определенные задачи никогда не рассматривают для oom, уничтожают, в то время как других можно всегда рассматривать. Значение добавляется непосредственно во вредность () счет так значение-500, например, средства обесценить 50% его потребления памяти по сравнению с другими задачами или в системе, связанной с mempolicy, в cpuset, или в совместном использовании того же контроллера памяти.
Если Вы установите высокое (выход) значение или для oom_adj или для oom_score_adj затем, то они будут уничтожены сначала. например.
echo 15 > /proc/[pid]/oom_adj
oom_adj идет от-16 до 15, и, как упомянуто выше oom_score_adj принимает-1000 к 1 000
Если можно изменить сценарий запуска, порождающий процесс, который Вы хотите расположить по приоритетам для oom-уничтожителя, добавить следующее к сценарию запуска:
echo 1000 > /proc/self/oom_score_adj
Значение наследовано для дочерних процессов.
У нас есть choom теперь.
tl; доктор: choom --adjust -100 myprogram
.
Страница справочника имеет больше информации.
Это старый вопрос. С systemd в последних системах это не может быть проще.
Как вам удобнее, export EDITOR=vim
или еще что-то, затем:
systemctl edit mysql.service
и введите две раскрывающиеся строки:
[Service]
OOMScoreAdjust=-150
save & exit; сделано — навсегда.
Используйте systemctl edit --full
, если вас смущает концепция вставки конфигурации (только будьте осторожны, чтобы не писать в /usr/lib/ systemd/system/*.service
, так как ваши изменения будут уничтожены при обновлении).
Док: man systemd.exec
OOMScoreAdjust=
Устанавливает уровень корректировки для убийцы нехватки памяти для исполняемых процессов. Принимает целое число от -1000 (чтобы отключить уничтожение OOM для этого процесса) до 1000 (чтобы сделать уничтожение этого процесса из-за нехватки памяти очень вероятным). Подробности смотрите в proc.txt[1].