Sous Linux, j'ai quelques processus qui ont tendance à planter occasionnellement (serveurs de jeux), qui finissent par utiliser 100% de processeur.
Je cherche un programme ou un script pour vérifier l'utilisation du processeur d'une liste de processus par nom et s'ils sont à 100% pendant plus de X fois, disons 30 secondes, tuez-les. J'ai essayé ps-watcher mais je n'ai pas pu déterminer comment y parvenir.
Le simple fait de tuer le processus à 100% d'utilisation ne fonctionnera pas, car il le frappera pendant de brèves périodes pendant le fonctionnement normal.
J'ai également trouvé ce script qui semble faire ce que je veux, mais il est limité à un seul processus: lien
Toute aide est grandement appréciée!
Réponses:
Essayez monit .
Vous pouvez utiliser une configuration comme celle-ci pour accomplir votre tâche:
Les détails sur cette configuration peuvent être trouvés dans la documentation de monit .
la source
start program
etstop program
sont juste pour le cas oùmonit
vous avez besoin de redémarrer votre processus. Vous pouvez toujours le démarrer avec votre script d'initialisation normal.monit
peut également vérifier si le programme est déjà en cours d'exécution (par exemple par son fichier PID ou son nom de processus).C'est ce que je cherchais, et je l'utilise depuis un certain temps (légèrement modifié). Dernièrement, j'ai mis un bogue dans mon travail, mais je dois continuer à faire fonctionner l'application (serveur de jeu).
J'avais cité la partie où le PID le plus élevé est tué, car il tuait le mauvais PID.
Voici ma dernière ébauche de votre script, jusqu'à présent, il trouve la surcharge la plus élevée et la tue efficacement (m'envoie également des informations chaque fois qu'il fait quoi que ce soit);
Ce petit script a été extrêmement utile, si vous n'aimez pas qu'il tue un processus, l'e-mail vous aidera à vous tenir informé.
la source
TOPPROCESS
est désactivé. Il ne triera pas par valeur réelle, mais ordonnera les entrées par ordre alphanumérique (par exemple, 6% auront priorité sur 12%). Une meilleure alternative pourrait être la commande suivante:top -b -n 1 | sed 1,6d | sed -n 2p
Vous trouverez ci-dessous un exemple de script BASH qui peut vous aider à obtenir des conseils pour vos propres besoins.
Veuillez noter que la valeur de votre $ CPU_THRESHOLD devrait dépendre du nombre de cœurs (CPU) que vous avez sur votre système. Une explication détaillée sur ce sujet peut être trouvée à http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages .
Vous pouvez appeler votre script depuis l'intérieur de / etc / inittab ou un cronjob pour chaque nombre de minutes que vous préférez. Veuillez également noter que l'exemple de script tuera le processus le plus élevé si $ CPU_LOAD est supérieur à $ CPU_THRESHOLD.
la source