GNU/Linux >> Tutoriels Linux >  >> Linux

Recevoir le signal avant que le processus ne soit tué par Oom Killer / Cgroups ?

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


Linux
  1. Définir le réglage Oom Killer pour le processus au démarrage ?

  2. Nombre maximum de threads par processus sous Linux ?

  3. Trouver quel processus a été tué par Linux OOM killer

  4. Utilisation de la mémoire du processus en cours en C

  5. Utilisation maximale de la mémoire d'un processus

Malloc sur Linux sans surengagement

Qu'est-ce qu'un processus arrêté sous Linux ?

Comment éviter d'aller au SWAP ?

Pourquoi Linux out-of-memory killer (OOM) ne s'exécute-t-il pas automatiquement, mais fonctionne-t-il sur sysrq-key ?

Vider la mémoire d'un processus Linux dans un fichier

OOM tueur tuant des choses avec beaucoup (?) De RAM libre