Как я использую oom_score_adj?

На 11,04, /proc/[pid] содержит oom_score_adj, но man proc описывает старое oom_adj. Я погуглил неудачно для любой информации о том, как использовать это.

То, что я должен расположить, - то, что процессы, запущенные 'PBS' или 'gridengine', уничтожаются, прежде чем что-либо еще будет уничтожено. Как я могу сделать это?

24
задан 9 September 2011 в 05:40

6 ответов

На основе моих собственных Вопросов и ответов на Unix&Linux по подобному вопросу.

Как Stuart указал очень хорошо в его ответе, допустимые значения являются целыми числами в диапазоне-1000 к 1 000 для oom_score_adj. Чем ниже значение, тем ниже шанс, что это будет уничтоженным.

Это очень неудобно для изменения этого значения много раз, после того как Вы перезапускаете приложение. Информация просто потеряна после того, как процесс завершился. Выскочка (init демон в Ubuntu), имеет хорошую опцию для этого для конфигурирования, чтобы демоны удостоверились, что она установлена каждый раз, когда ей запустили (ре):

oom score

[...] надрез [...]

Пример:

# 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', о котором Вы говорите в Вашем вопросе, являются поддерживающими Выскочку, иначе Вам будет нужен другой способ изменить это постоянно.

13
ответ дан 23 November 2019 в 01:20

Изучение кода всегда является хорошей идеей. Обычно я использую поисковую функцию kernel.org, но его в настоящее время вниз. GitHub делает хорошее задание также. Я нашел это:

Вместо этого новое настраиваемое,/proc/pid/oom_score_adj, добавляется что диапазоны от-1000 до +1000. Это может использоваться для поляризации эвристики, таким образом, что определенные задачи никогда не рассматривают для oom, уничтожают, в то время как других можно всегда рассматривать. Значение добавляется непосредственно во вредность () счет так значение-500, например, средства обесценить 50% его потребления памяти по сравнению с другими задачами или в системе, связанной с mempolicy, в cpuset, или в совместном использовании того же контроллера памяти.

От https://github.com/mirrors/linux-2.6/commit/a63d83f427fbce97a6cea0db2e64b0eb8435cd10#include/linux/oom.h

5
ответ дан 23 November 2019 в 01:20

Если Вы установите высокое (выход) значение или для oom_adj или для oom_score_adj затем, то они будут уничтожены сначала. например.

echo 15 > /proc/[pid]/oom_adj

oom_adj идет от-16 до 15, и, как упомянуто выше oom_score_adj принимает-1000 к 1 000

6
ответ дан 23 November 2019 в 01:20

Если можно изменить сценарий запуска, порождающий процесс, который Вы хотите расположить по приоритетам для oom-уничтожителя, добавить следующее к сценарию запуска:

echo 1000 > /proc/self/oom_score_adj

Значение наследовано для дочерних процессов.

7
ответ дан 23 November 2019 в 01:20

У нас есть choom теперь.

tl; доктор: choom --adjust -100 myprogram.

Страница справочника имеет больше информации.

1
ответ дан 23 November 2019 в 01:20

Это старый вопрос. С 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].

3
ответ дан 11 December 2020 в 15:40

Другие вопросы по тегам:

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