Dans notre cluster, nous limitons nos ressources de processus, par ex. mémoire (memory.limit_in_bytes
).
Je pense qu'au final, cela est également géré via le tueur OOM dans le noyau Linux (on dirait en lisant le code source).
Existe-t-il un moyen d'obtenir un signal avant que mon processus ne soit tué ? (Tout comme le -notify
option pour le qsub
de SGE , qui enverra SIGUSR1
avant que le processus ne soit tué.)
J'ai lu à propos de /dev/mem_notify
ici mais je ne l'ai pas - y a-t-il autre chose de nos jours ? J'ai aussi lu ceci qui semble quelque peu pertinent.
Je veux pouvoir au moins vider une petite trace de pile et peut-être d'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 c'est le cas, il envoie au processus un SIGUSR1
. Dans Bash, je lance ce script en arrière-plan (cgroup-mem-limit-watcher.py &
) afin qu'il surveille les autres procs dans le même groupe de contrôle et qu'il se ferme automatiquement lorsque le processus Bash parent meurt.
Réponse acceptée :
Il est possible de s'inscrire pour recevoir une notification lorsque l'utilisation de la mémoire d'un groupe de contrôle dépasse un certain seuil. En principe, définir le seuil à un point approprié en dessous de la limite réelle vous permettrait d'envoyer un signal ou de prendre d'autres mesures.
Voir :
https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt