web-dev-qa-db-fra.com

Comment utiliser oom_score_adj?

Le 11.04, /proc/[pid] contient oom_score_adj, mais man proc décrit l'ancien oom_adj. J'ai googlé sans succès pour toute information sur la façon de l'utiliser.

Ce que je dois organiser, c'est que les processus lancés par 'pbs' ou 'gridengine' soient tués avant toute autre chose. Comment puis je faire ça?

23
bmargulies

Basé sur mon propre Q & A sur Unix et Linux sur une question similaire.

Comme Stuart l'a très bien souligné dans sa réponse , les valeurs valides sont des entiers compris entre -1000 et 1000 pour oom_score_adj. Le diminue la valeur, le diminue la probabilité que cela soit tué.

Il est très gênant de devoir modifier cette valeur encore et encore une fois que vous redémarrez l'application. Les informations sont simplement perdues une fois le processus terminé. Upstart (le démon init dans Ubuntu) a une option agréable à configurer pour les démons afin de s’assurer qu’elle est définie à chaque démarrage (re):

oom score

[...] snip [...]

Exemple:

# this application is a "resource hog"
oom score 1000

expect daemon
respawn
exec /usr/bin/leaky-app

En gros, vous pouvez donc modifier le fichier de configuration /etc/init/myservice.conf pour les services que vous souhaitez modifier, afin d'inclure une ligne oom score -1000. Je suppose que les services 'pbs' ou 'gridengine' dont vous parlez dans votre question sont activés pour Upstart, sinon vous aurez besoin d'un autre moyen de changer cela de façon permanente.

12
gertvdijk

Si vous pouvez modifier le script de démarrage pour générer le processus que vous souhaitez hiérarchiser pour oom-killer, ajoutez ce qui suit au script de démarrage:

echo 1000 > /proc/self/oom_score_adj

La valeur est héritée pour les processus enfants.

7
user1338062

Si vous définissez une valeur élevée (ish) pour oom_adj ou oom_score_adj, ils seront tués en premier. par exemple.

echo 15 > /proc/[pid]/oom_adj

oom_adj va de -16 à 15 et comme mentionné ci-dessus, oom_score_adj accepte -1000 à 1000.

6
Stuart

Rechercher dans le code est toujours une bonne idée. J'utilise normalement la fonction de recherche de kernel.org, mais elle est actuellement inactive. Github fait du bon travail aussi. J'ai trouvé ça:

Au lieu de cela, un nouvel accord,/proc/pid/oom_score_adj, est ajouté et va de -1000 à +1000. Il peut être utilisé pour polariser l'heuristique de telle sorte que certaines tâches ne soient jamais considérées comme mortelles alors que d'autres peuvent toujours l'être. La valeur étant ajoutée directement au score badness (), une valeur de -500, par exemple, signifie une réduction de 50% de sa consommation de mémoire par rapport à d'autres tâches du système, liées à la mempolicy, au cpuset ou partage le même contrôleur de mémoire.

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

5
falstaff

Nous avons Choom maintenant.

tl; dr: choom --adjust -100 myprogram.

La page de manuel contient plus d’informations.

1
Frederick Nord