2 votes

Empêche un processus (script) d'invoquer oom killer

J'ai eu une situation très malheureuse, où un bash script qui contenait une erreur subtile s'est déchaîné et a pris toute la mémoire disponible, puis a commencé à tuer d'autres tâches (applications de production !) pour en obtenir encore plus.

Comment puis-je protéger les invocations de cette application et d'autres scripts de sorte que, lorsqu'ils atteignent la limite de mémoire, ils s'arrêtent d'eux-mêmes et ne tuent pas les autres applications ?

Je préférerais quelque chose que je puisse incorporer dans le texte du script.

2voto

John Mahowald Points 28597

Sous Linux, https://www.kernel.org/doc/Documentation/sysctl/vm.txt documente une variété de paramètres pour le système de mémoire virtuelle.

Par exemple, vm.oom_kill_allocating_task=1

Si cette valeur est différente de zéro, le tueur d'OOM tue simplement la tâche qui a déclenché la condition d'absence de mémoire. qui a déclenché la condition d'absence de mémoire. Cela évite le coûteux l'analyse de la liste des tâches.

Il n'y a aucune garantie que vos applications de production ne soient pas celles qui déclenchent l'OOM. Mais il est plus probable que ce soit une allocation galopante qui l'atteigne.

Il existe également un score que vous pouvez modifier pour pondérer des processus spécifiques plus ou moins susceptibles d'être assassinés pour leur mémoire. /proc/$PID/oom_adj. Bien que, vous voulez probablement le définir dans votre init scripts. systemd.exec a OOMScoreAdjust .

Vous pouvez désactiver complètement le tueur d'OOM. Cependant, en cas de pression extrême sur la mémoire, le système peut ne pas être en mesure de répondre, ou paniquer.

2voto

MadHatter Points 77602

ulimit -m vous permettra de définir une limite principale (enfin, RSS) applicable à un processus, et ulimit -v vous permettra de faire de même pour l'empreinte de la VM.

0voto

Vous pouvez utiliser supervisord pour gérer le processus. Le superviseur peut fixer un quota de mémoire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X