Gestion de la liste des processus et terminaison automatique des processus

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

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution Linux
Logiciel Ligne de commande bash, système basé sur Linux
Autre Toute utilité qui n'est pas incluse dans le shell bash par défaut peut être installée en utilisant Sudo Apt-Get Install Utility-Name (ou Installation de miam pour les systèmes basés sur Redhat)
Conventions # - nécessite que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - exige que les commandes Linux soient exécutées en tant qu'utilisateur régulier non privilégié

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 sur 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 non dé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 moteur de tue.

D'un autre côté, avec le processeur, même si le logiciel exécutant ailleurs sur le serveur maximum le CPU, votre serveur continuera à fonctionner. S'il s'agit d'un véritable programme de porc de CPU, il peut être prohibitif lent, 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 | tête -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 piquer), et le pourcentage de mémoire qu'il consomme (-o PMEM), ou au total (avec des options combinées: -EO PID, PMEM).

Ensuite, nous avons demandé que la liste soit prévenue pour nous (--trier) et définir 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 ,communiquer au PID, PMEM liste, ou nous utilisons simplement ps -ef | grep pid où PID est le numéro répertorié dans la première colonne du ps Sortie pour voir tous les détails d'un processus.

Automatisons maintenant cela de telle manière que les processus qui utilisent plus de 10% de la mémoire sont 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 garanties d'aucune sorte. Vous pouvez résilier certains processus que vous ne vouliez pas ou ne devriez pas être, licencié.

# 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 piquer (ID de processus) autour. 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 numéro 1 pour 9, au moins une fois (au moins une fois est la fréquence par défaut, donc aucun symbole similaire à * est utilisé!). C'est pour capturer un nombre de dix (commence avec 1) pour 99 (commence avec 9). Ensuite, nous en cherchons un autre 0 pour 9, Donc, au total, nous recherchons / grivons les chiffres dix pour 99. Nous suivons cela par un point littéral (\., faire pas utiliser . Ici comme un seul point sans barrestre préfixe signifie N'importe quel caractère plutôt qu'un point littéral!) pour s'assurer que nous capturons avant le point décimal uniquement.

Nous ne prenons ensuite que la deuxième sortie de colonne (imprimer 2 $, avec 2 $ Être la deuxième colonne, 1 $ le premier etc.) en utilisant awk. Enfin, nous passons ceci à xargs et écrire tuer -9 Dans un format propre et facile à comprendre. Nous aurions pu écrire cela en utilisant une syntaxe scolarisée, mais c'est agréable, propre et clair. Le -je indique ce que nous utiliserons comme notre corde de remplacement (remplaçant toute occurrence de la même chose dans la commande par toute entrée xargs a reçu du tuyau), dans ce cas . Je recommande aussi en général comme un échange sécurisé / remplacer la chaîne.

Si vous souhaitez en savoir plus sur xargs, Veuillez consulter nos xargs pour les débutants avec des exemples et des xargs multiples avec des articles d'exemples.

Le résultat de l'exécution de la commande est que tout processus qui utilise plus de 10% de la mémoire sera immédiatement terminé avec un fort tuer -9 commande. Si vous souhaitez automatiser la même chose, vous pouvez mettre cela dans un tandis que c'est vrai; Faire boucle, remplaçant simplement le avec 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'efforcer de comprendre ce que vous faites en tout temps! Vous aimerez peut-être également introduire une minute dormir Pour éviter de marteler le serveur avec des commandes:

# tandis que c'est vrai; Do PS -EO PMEM, PID --SORT -RSS | grep '^ [\ t] * [1-9] [0-9] \.'| awk 'print $ 2' | xargs -i  kill -9 ; dormir 60; fait 

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 formats personnalisés ps sortie, ainsi que le xargs et tuer commandes. 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. Apprécier!

Tutoriels Linux connexes:

  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Masterring Bash Script Loops
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Choses à installer sur Ubuntu 20.04
  • Meilleurs jeux de terminaux sur Linux
  • Comparaison des MPM de Linux Apache PreFork vs Worker
  • Guide de dépannage général GNU / Linux pour les débutants
  • Système linux hung? Comment s'échapper vers la ligne de commande et…
  • Gestion des processus de fond de bash
  • Comment propager un signal aux processus d'enfants à partir d'un bash…