Je travaille sur des jeux de données à grande échelle. Lors du test d'un nouveau logiciel, un script se glisse parfois sur moi, récupère rapidement toute la RAM disponible et rend mon bureau inutilisable. Je voudrais un moyen de définir une limite de RAM pour un processus afin que s'il dépasse ce montant, il soit automatiquement tué. Une solution spécifique au langage ne fonctionnera probablement pas, car j'utilise toutes sortes d'outils différents (R, Perl, Python, Bash, etc.).
Existe-t-il une sorte de moniteur de processus qui me permettra de définir un seuil de RAM et de tuer automatiquement un processus s'il en utilise plus?
Réponses:
Je déteste être le gars qui répond à sa propre question, mais ce matin, j'ai trouvé une méthode alternative, enveloppée dans un joli petit utilitaire. 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 vote à Amey Jah pour la bonne réponse. Je vais vérifier si celui-ci me fait défaut.
la source
Je conseillerais fortement de ne pas le faire . Comme suggéré par @chrisamiller, définir ulimit limitera la RAM disponible avec le processus.
Mais si vous insistez, suivez cette procédure.
Enregistrez le script suivant sous
killif.sh
:Rendez-le maintenant exécutable.
Exécutez maintenant ce script sur le terminal. Remplacez
PROCID
par l'ID de processus réel etSIZE
par la taille en Mo.Par exemple:
Si la valeur
SIZE
est 100, le processus sera tué si son utilisation de la RAM dépasse 100 Mo.Attention: vous savez ce que vous essayez de faire. Tuer n'est pas une bonne idée. Si ce processus a une commande d'arrêt ou d'arrêt, modifiez le script et remplacez la
kill -9
commande par cetteshutdown
commande.la source
Essayez l'
prlimit
outil, à partir duutil-linux
package. Il exécute un programme avec des limites de ressources. Il utilise l'prlimit
appel système pour définir les limites, qui sont ensuite appliquées uniquement par le noyau.Vous pouvez configurer 16 limites, notamment:
la source
C'était trop gros pour contenir un commentaire. J'ai modifié le script d'origine d'Amey pour inclure un
pgrep
, donc au lieu d'avoir à saisir manuellement l'ID du processus, vous pouvez simplement l'exclure par son nom. Par exemple,./killIf.sh chrome 4000
tue tout processus Chrome qui dépasse 4 Go en mémoire.Veillez à sélectionner une chaîne grep étroite et une limite de mémoire suffisamment grande pour ne pas tuer inutilement les processus involontaires.
la source