Recherche sur le site Web

Gestion de la liste des processus et terminaison automatique des processus


À mesure que l'utilisation/maximisation optimale de Sever continue de croître, il devient de plus en plus important de bien gérer les processus. Un aspect de cela est la terminaison automatique des processus. Lorsqu'un processus est devenu voyou et consomme trop de ressources, il peut être terminé automatiquement.

Ceci est particulièrement adapté aux serveurs qui ont beaucoup de processus temporaires ou jetables. Il est également bien adapté aux tests de serveurs qui exécutent de nombreux essais d'essai et où de tels essais se révèlent instables ou provoquent de manière irrégulière le logiciel sous les tests (par exemple en utilisant trop de mémoire)

Dans ce tutoriel, vous apprendrez :

  • Comment gérer les processus de manière automatisée
  • Quelles ressources vous voudrez peut-être surveiller et pourquoi
  • Exemple de code montrant comment la terminaison automatique des processus peut fonctionner pour les problèmes de sofgging de mémoire

Gestion de la liste des processus et terminaison automatique des processus

Exigences et conventions logicielles utilisées

Trop de mémoire! Ou mieux, trop peu de mémoire!

Il existe deux ressources principales sur lesquelles vous souhaitez toujours toujours garder un œil, selon le logiciel qui est utilisé ailleurs sur le serveur, et c'est l'utilisation de la mémoire et l'espace disque. L'utilisation du processeur peut également entrer en scène, mais elle est quelque peu différente des autres. La raison en est que - lorsque vous manquez d'espace disque ou hors de l'espace mémoire, votre serveur commencera à jouer.

Vous pouvez obtenir un comportement indéfini en raison de la manquage de l'espace disque, et si vous manquez de mémoire, le tueur Oom (hors de la mémoire du processus de tue de processus) peut lancer et tuer certains processus, etc.

D'un autre côté, avec le processeur, même si le logiciel exécuté ailleurs sur le serveur maximum le CPU, votre serveur continuera à fonctionner. S'il s'agit d'un véritable programme de porc CPU, il peut être prohibitif, mais dans la plupart des cas, vous pourrez toujours taper certaines commandes.

Cet article se concentrera sur la gestion de la gestion des processus de la mémoire: terminaison automatique des processus qui consomment trop de mémoire. Voyons d'abord comment nous pouvons surveiller l'utilisation du processus de mémoire:

$ ps -eo pid,pmem --sort -rss | head -n10
    PID %MEM
 406677 19.5
 373013  2.1
 406515  2.0
 406421  1.9
   2254  1.8
 406654  1.8
 406554  1.7
 406643  0.9
  16622  0.7

Ici, nous avons demandé ps pour produire une liste des 10 meilleurs PID. Nous avons indiqué que nous voulons voir tous les processus ( -e ), et pour chaque processus, nous voulons voir l'ID de processus (-o pid ), et le pourcentage de mémoire qu'il consomme (-o PMEM ), ou dans le total (avec des options combinées: -eo pid, pMem ).

Ensuite, nous avons demandé que la liste soit prévenue pour nous ( - tri ) et définissez l'option RSS ( -rss ) comme spécification du format long. Nous capturons ensuite les 10 meilleurs résultats en utilisant la tête -N10. Si nous voulions voir quels processus utilisent la mémoire, nous pouvons également ajouter , Comm à la liste PID, PMEM , ou nous utilisons simplement ps -ef | grep pid où PID est le nombre comme indiqué dans la première colonne de la sortie ps pour voir les détails complets d'un processus.

Automatisons maintenant cela de telle manière que les processus qui utilisent plus de 10% de la mémoire soient automatiquement terminés.

AVERTISSEMENT: n'exécutez cela sur aucun ordinateur sans comprendre pleinement ce qu'il fera et comment cela fonctionne. Les informations ici sont fournies telles quelles, sans garantie de toute nature. Vous pouvez mettre fin à certains processus que vous ne vouliez pas ou ne devriez pas être terminés.

# ps -eo pmem,pid --sort -rss | grep '^[ \t]*[1-9][0-9]\.' | awk '{print $2}' | xargs -I{} kill -9 {}

Premièrement, nous allons exécuter cela en tant que racine, pour nous assurer que nous avons suffisamment de privilèges pour tuer tout processus pertinent. Notez que nous avons échangé le pMEM (pourcentage de mémoire) et pid (ID de processus). Cela rend un peu plus facile d'utiliser une expression régulière grep . Notre expression régulière Grep fonctionne comme ceci: d'abord, recherchez un espace ( ) ou ( [...] ) Un onglet (\t ), zéro ou plus ( * ) fois.

Ensuite, recherchez le nombre 1 à 9 , au moins une fois ( au moins une fois n'est la fréquence par défaut, donc aucun symbole similaire à * est utilisé!). Il s'agit de capturer n'importe quel nombre de 10 (commence par 1 ) à 99 (commence par 9 ). Ensuite, nous recherchons un autre 0 à 9 , donc dans le total, nous recherchons/greppons les nombres 10 à 99 . Nous suivons ceci par un point littéral ( \. , faire pas utiliser . Ici en tant que point unique sans préfixe, c'est-à -dire tout caractère plutôt qu'un point littéral!) Pour vous assurer que nous capturons avant le point décimal uniquement.

Nous ne prenons ensuite que la deuxième sortie de colonne ( {print à 2 $} , avec $$ étant la deuxième colonne, $1 le premier etc.) en utilisant awk . Enfin, nous passons cela à xargs et écrivons Kill -9 dans un format propre et facile à comprendre. Nous aurions pu écrire cela en utilisant une syntaxe des sténographies, mais c'est agréable, propre et clair. Le -i indique ce que nous utiliserons comme notre corde de remplacement (en remplacement de toute occurrence de la même chose dans la commande par toute entrée xargs cas {} . Je recommande également {} en général en tant que chaîne d'échange/remplacement sûre.

Si vous souhaitez en savoir plus sur xargs , veuillez consulter nos xargs pour les débutants avec des exemples et des xargs multi-filets avec des articles d'exemples.

Le résultat de l'exécution de la commande est que tous les processus qui utilisent plus de 10% de la mémoire seront immédiatement résiliés avec une commande forte kill -9 . Si vous souhaitez automatiser la même chose, vous pouvez mettre cela dans un tout en étant vrai; Do ..... Done Loop, en remplacement simplement de la ..... par la commande ci-dessus, ou vous pouvez l'ajouter à votre crontab, ou à d 'autres scripts de surveillance préexistants.

Soyez prudent avec l'utilisation de ces commandes, ce n'est pas sans risque. S'efforcez de comprendre ce que vous faites en tout temps! Vous aimerez peut-être également introduire un Sleep de 1 minute pour éviter de marteler le serveur avec des commandes:

# while true; do ps -eo pmem,pid --sort -rss | grep '^[ \t]*[1-9][0-9]\.' | awk '{print $2}' | xargs -I{} kill -9 {}; sleep 60; done

De cette façon, nous surveillons tous les processus en mémoire sur une base régulière et/ou continue et mettant fin à tous les processus qui commencent à devenir voyous, à utiliser beaucoup de mémoire, etc.

Conclusion

Dans cet article, nous envisageons de gérer les processus de manière automatisée en utilisant des sorties ps formatées personnalisées, ainsi que les commandes xargs et kill . Nous avons également exploré les ressources à surveiller et pourquoi. Enfin, nous avons démontré comment la terminaison automatique des processus peut fonctionner pour les problèmes de monnaie de la mémoire dans le code. Jouir!

Articles connexes: