Як використовувати oom_score_adj?


24

11.04 /proc/[pid]містить oom_score_adj, але man procописує старе oom_adj. Я невдало шукав Google для будь-якої інформації про те, як це використовувати.

Що мені потрібно домовитись, це те, що процеси, запущені 'pbs' або 'gridengine', вбиваються до того, як щось інше вбивається. Як я можу це зробити?


Постійно змінити цю зміну для служб, якими керує Upstart: Як встановити корективи вбивці OOM для демонів назавжди? .
gertvdijk

Це вже відповідь. Це посилання на нього. :)
gertvdijk

Але не на цьому сайті :-)
bmargulies

Відповіді:


13

На основі моїх власних запитань щодо Unix & Linux на подібному питанні.

Як Стюарт дуже добре зазначив у своїй відповіді , дійсні значення - цілі числа в межах від -1000 до 1000 для oom_score_adj. Чим менше значення, тим менша ймовірність того, що він буде вбитий.

Дуже незручно змінювати це значення знову і знову після перезавантаження програми. Інформація просто втрачається після закінчення процесу. Upstart (демон 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', про які ви говорите у своєму запитанні, увімкнено Upstart, інакше вам знадобиться інший спосіб, щоб це постійно змінити.


7

Якщо ви можете змінити нерестовий старт сценарію, що додає процес, якому ви хочете визначити пріоритет для oom-killer, додайте до стартового сценарію наступне:

echo 1000 > /proc/self/oom_score_adj

Значення успадковується для дочірніх процесів.


6

Якщо ви встановите високе (ish) значення для oom_adj або oom_score_adj, вони будуть вбиті першими. напр

echo 15 > /proc/[pid]/oom_adj

oom_adj переходить від -16 до 15, і як було сказано вище, oom_score_adj приймає від -1000 до 1000


Для цього вам потрібно мати корінь. sudo sh -c "echo -1000 > /proc/[PID]/oom_score_adj"
Аділь

2
Насправді ви можете збільшити бал за ваші процеси без кореня ("так, це може бути убито"). Зниження (нижче 0) потребує кореня.
Пісквор

5

Заглянути в код - це завжди гарна ідея. Зазвичай я використовую пошукову функцію kernel.org, але її наразі немає. Github теж добре справляється. Я знайшов це:

Натомість додається новий налаштований / proc / pid / oom_score_adj, який становить від -1000 до +1000. Він може бути використаний для поляризації евристики таким чином, що певні завдання ніколи не розглядаються за вбивство, а інші завжди можуть розглядатися. Значення додається безпосередньо до оцінки badness (), тому значення -500, наприклад, означає знижку 50% його споживання пам'яті порівняно з іншими завданнями або в системі, пов'язаній з мемполіцією, в cpuset, або обмін тим самим контролером пам'яті.

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


Дякую за вказівник, але я сподіваюся, що хтось проїде повз і зніме рецепт усієї проблеми, який, здавалося б, впорядковує встановлення цього значення для демона exec pbs, перш ніж воно розщепить будь-які завдання.
bmargulies

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.