recevoir le signal avant que le processus ne soit tué par le tueur OOM / les groupes de contrôle


11

Dans notre cluster, nous restreignons les ressources de nos processus, par exemple memory ( memory.limit_in_bytes).

Je pense qu'en fin de compte, cela est également géré via le tueur OOM dans le noyau Linux (cela ressemble en lisant le code source ).

Existe-t-il un moyen d'obtenir un signal avant la fin de mon processus? (Tout comme l' -notifyoption pour les SGEqsub , qui sera envoyée SIGUSR1avant la fin du processus.)

J'ai lu /dev/mem_notify ici mais je ne l'ai pas - y a-t-il autre chose de nos jours? J'ai également lu ceci qui semble quelque peu pertinent.

Je veux pouvoir au moins vider une petite trace de pile et peut-être quelques autres informations de débogage utiles - mais peut-être que je peux même récupérer en libérant de la mémoire.

Une solution de contournement que j'utilise actuellement est ce petit script qui vérifie fréquemment si je suis proche (95%) de la limite et si oui, il envoie le processus a SIGUSR1. Dans Bash, je démarre ce script en arrière-plan ( cgroup-mem-limit-watcher.py &) pour qu'il surveille les autres procs du même groupe de contrôle et se ferme automatiquement lorsque le processus Bash parent meurt.


Je n'ai pu trouver aucune source d'autorité, ni trouver un moyen d'invoquer manuellement OOM killer pour un processus spécifique (pour tester l'idée) , mais d'après ce que j'ai trouvé, il semble que OOM killer envoie simplement SIGTERM, vous devez donc définir un gestionnaire pour ce signal.
Hi-Angel

5
@ Hi-Angel: D'après le code source Linux , il semble qu'il envoie SIGKILL.
Albert

@Albert Après avoir lu le code source, je pense aussi que OOM Killer enverra directement un signal SIGKILL.
andy

Réponses:



5

Le tueur OOM envoie un SIGKILL car il serait autrement contre-productif de laisser le programme problématique choisir de continuer.

Cela signifie qu'il n'y a absolument aucun moyen pour un processus de savoir quand il est sur le point d'être tué par lui.

La gestion de ces problèmes implique généralement d'apporter des corrections aux programmes ou à leur configuration. Parfois, selon la configuration du système, le simple fait d'augmenter l'espace de swap peut donner au système d'exploitation plus de flexibilité de gestion de la mémoire pour éviter de telles mesures drastiques.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.