Je travaille sur des jeux de données à grande échelle. Lors du test d'un nouveau logiciel, un script m'arrive parfois sur moi, récupère rapidement toute la mémoire RAM disponible et rend mon bureau inutilisable. Je voudrais un moyen de définir une limite RAM pour un processus afin que si elle dépasse cette quantité, il sera tué automatiquement. Une solution spécifique à une langue ne fonctionnera probablement pas, car j'utilise toutes sortes d'outils différents (R, Perl, Python, Bash, etc.).
Y a-t-il une sorte de moniteur de processus qui me permette de définir un seuil de RAM et de tuer automatiquement un processus s'il en utilise davantage?
Je déteste être le gars qui répond à sa propre question, mais ce matin, j'ai trouvé une méthode alternative, intégrée dans un petit utilitaire de Nice. Cela limitera le temps CPU ou la consommation de mémoire:
https://github.com/pshved/timeout
Je donne un coup de feu à celui-ci en premier, mais je demande à Amey Jah de me donner une réponse positive. Je vais vérifier si celui-ci me manque.
Je conseillerais fortement de ne pas le faire. Comme suggéré par @chrisamiller, définir ulimit limitera le RAM disponible avec le processus.
Néanmoins, si vous insistez, suivez cette procédure.
Enregistrez le script suivant sous le nom killif.sh
:
#!/bin/sh
if [ $# -ne 2 ];
then
echo "Invalid number of arguments"
exit 0
fi
while true;
do
SIZE=$(pmap $1|grep total|grep -o "[0-9]*")
SIZE=${SIZE%%K*}
SIZEMB=$((SIZE/1024))
echo "Process id =$1 Size = $SIZEMB MB"
if [ $SIZEMB -gt $2 ]; then
printf "SIZE has exceeded.\nKilling the process......"
kill -9 "$1"
echo "Killed the process"
exit 0
else
echo "SIZE has not yet exceeding"
fi
sleep 10
done
Maintenant, rendez-le exécutable.
chmod +x killif.sh
Maintenant, lancez ce script sur le terminal. Remplacez PROCID
par l'ID de processus réel et SIZE
par la taille en Mo.
./killif.sh PROCID SIZE
Par exemple:
./killif.sh 132451 100
Si SIZE
vaut 100, le processus sera tué si son utilisation de RAM dépasse 100 Mo.
Attention: Vous savez ce que vous essayez de faire. Tuer le processus n'est pas une bonne idée. Si ce processus comporte une commande d'arrêt ou d'arrêt, éditez le script et remplacez la commande kill -9
par cette commande shutdown
.
Essayez l'outil prlimit
à partir du package util-linux
. Il exécute un programme avec des ressources limitées. Il utilise l'appel système prlimit
pour définir les limites, qui sont ensuite appliquées uniquement par le noyau.
Vous pouvez configurer 16 limites, y compris: