Recherche de site Web

Comment surveiller l'utilisation du système, les pannes et dépanner les serveurs Linux - Partie 9


Bien que Linux soit très fiable, les administrateurs système avisés devraient trouver un moyen de garder un œil sur le comportement et l’utilisation du système à tout moment. Assurer une disponibilité aussi proche que possible de 100 % et la disponibilité des ressources sont des besoins critiques dans de nombreux environnements. L'examen de l'état passé et actuel du système nous permettra de prévoir et très probablement de prévenir d'éventuels problèmes.

Présentation du programme de certification Linux Foundation

Dans cet article, nous présenterons une liste de quelques outils disponibles dans la plupart des distributions en amont pour vérifier l'état du système, analyser les pannes et résoudre les problèmes en cours. Plus précisément, parmi la myriade de données disponibles, nous nous concentrerons sur l'utilisation du processeur, de l'espace de stockage et de la mémoire, la gestion des processus de base et l'analyse des journaux.

Utilisation de l'espace de stockage

Il existe 2 commandes bien connues sous Linux qui sont utilisées pour inspecter l'utilisation de l'espace de stockage : df et du.

Le premier, df (qui signifie disque libre), est généralement utilisé pour signaler l'utilisation globale de l'espace disque par système de fichiers.

Exemple 1 : Rapport sur l'utilisation de l'espace disque en octets et dans un format lisible par l'homme

Sans options, df rapporte l'utilisation de l'espace disque en octets. Avec l'indicateur -h, il affichera les mêmes informations en utilisant Mo ou Go à la place. Notez que ce rapport inclut également la taille totale de chaque système de fichiers (en blocs de 1 Ko), les espaces libres et disponibles et le point de montage de chaque périphérique de stockage.

df
df -h

C'est certainement bien, mais il existe une autre limitation qui peut rendre un système de fichiers inutilisable, à savoir le manque d'inodes. Tous les fichiers d'un système de fichiers sont mappés sur un inode qui contient ses métadonnées.

Exemple 2 : Inspection de l'utilisation des inodes par système de fichiers dans un format lisible par l'homme avec
df -hTi

vous pouvez voir la quantité d'inodes utilisés et disponibles :

Selon l'image ci-dessus, il y a 146 inodes utilisés (1%) dans /home, ce qui signifie que vous pouvez toujours créer 226 Ko de fichiers dans ce système de fichiers.

Exemple 3 : Rechercher et/ou supprimer des fichiers et répertoires vides

Notez que vous pouvez manquer d'espace de stockage bien avant de manquer d'inodes, et vice versa. Pour cette raison, vous devez surveiller non seulement l'utilisation de l'espace de stockage, mais également le nombre d'inodes utilisés par le système de fichiers.

Utilisez les commandes suivantes pour rechercher des fichiers ou des répertoires vides (qui occupent 0B) qui utilisent des inodes sans raison :

find  /home -type f -empty
find  /home -type d -empty

De plus, vous pouvez ajouter l'indicateur -delete à la fin de chaque commande si vous souhaitez également supprimer ces fichiers et répertoires vides :

find  /home -type f -empty --delete
find  /home -type f -empty

La procédure précédente a supprimé 4 fichiers. Vérifions à nouveau le nombre de nœuds utilisés/disponibles dans /home :

df -hTi | grep home

Comme vous pouvez le voir, il y a 142 inodes utilisés maintenant (4 de moins qu'avant).

Exemple 4 : Examen de l'utilisation du disque par répertoire

Si l'utilisation d'un certain système de fichiers dépasse un pourcentage prédéfini, vous pouvez utiliser du (abréviation d'utilisation du disque) pour savoir quels sont les fichiers qui occupent le plus d'espace.

L'exemple est donné pour /var, qui comme vous pouvez le voir dans la première image ci-dessus, est utilisé à 67 %.

du -sch /var/*

Remarque : Vous pouvez basculer vers l'un des sous-répertoires ci-dessus pour savoir exactement ce qu'ils contiennent et combien occupe chaque élément. Vous pouvez ensuite utiliser ces informations pour supprimer certains fichiers s'ils ne sont pas nécessaires ou pour étendre la taille du volume logique si nécessaire.

Lire aussi

  1. 12 commandes « df » utiles pour vérifier l'espace disque
  2. 10 commandes « du » utiles pour rechercher l'utilisation du disque des fichiers et des répertoires

Utilisation de la mémoire et du processeur

L'outil classique sous Linux utilisé pour effectuer une vérification globale de l'utilisation du processeur/de la mémoire et de la gestion des processus est la commande supérieure. De plus, top affiche une vue en temps réel d'un système en cours d'exécution. Il existe d'autres outils qui pourraient être utilisés dans le même but, tels que htop, mais j'ai opté pour top car il est installé prêt à l'emploi dans n'importe quelle distribution Linux.

Exemple 5 : Affichage d'un état en direct de votre système avec top

Pour commencer, tapez simplement la commande suivante dans votre ligne de commande et appuyez sur Entrée.

top

Examinons un résultat typique :

Dans les lignes 1 à 5, les informations suivantes sont affichées :

1. L'heure actuelle (20:41:32) et la disponibilité (7 heures et 41 minutes). Un seul utilisateur est connecté au système et la charge est moyenne au cours des 1, 5 et 15 dernières minutes, respectivement. 0,00, 0,01 et 0,05 indiquent que pendant ces intervalles de temps, le système est resté inactif pendant 0 % du temps (0,00 : aucun processus n'attendait le CPU), il a ensuite été surchargé de 1 % (0,01 : une moyenne de 0,01 processus attendaient le CPU) et 5% (0,05). Si inférieur à 0 et plus le nombre est petit (0,65, par exemple), le système est resté inactif pendant 35 % au cours des 1, 5 ou 15 dernières minutes, selon l'endroit où 0,65 apparaît.

2. Actuellement, 121 processus sont en cours d'exécution (vous pouvez voir la liste complète en 6). Un seul d'entre eux est en cours d'exécution (en haut dans ce cas, comme vous pouvez le voir dans la colonne %CPU) et les 120 restants attendent en arrière-plan mais sont « en veille » et resteront dans cet état jusqu'à ce que nous les appelions. Comment? Vous pouvez le vérifier en ouvrant une invite MySQL et en exécutant quelques requêtes. Vous remarquerez à quel point le nombre de processus en cours augmente.

Alternativement, vous pouvez ouvrir un navigateur Web et accéder à n’importe quelle page donnée servie par Apache et vous obtiendrez le même résultat. Bien entendu, ces exemples supposent que les deux services sont installés sur votre serveur.

3. us (temps d'exécution des processus utilisateur avec priorité non modifiée), sy (temps d'exécution des processus noyau), ni (temps d'exécution des processus utilisateur avec priorité modifiée), wa (temps d'attente pour la fin des E/S), hi (temps passé à traiter les interruptions matérielles), si (temps passé à gérer les interruptions logicielles), st (temps volé à la machine virtuelle actuelle par l'hyperviseur – uniquement dans les environnements virtualisés).

4. Utilisation de la mémoire physique.

5. Échangez l'utilisation de l'espace.

Exemple 6 : Inspection de l'utilisation de la mémoire physique

Pour inspecter la mémoire RAM et l'utilisation du swap, vous pouvez également utiliser la commande gratuite.

free

Bien entendu, vous pouvez également utiliser les commutateurs -m (MB) ou -g (GB) pour afficher les mêmes informations sous une forme lisible par l'homme :

free -m

Quoi qu'il en soit, vous devez être conscient du fait que le noyau réserve autant de mémoire que possible et la met à la disposition des processus lorsqu'ils en font la demande. En particulier, la ligne « -/+ buffers/cache » affiche les valeurs réelles après prise en compte de ce cache d'E/S.

En d'autres termes, la quantité de mémoire utilisée par les processus et la quantité disponible pour les autres processus (dans ce cas, 232 Mo utilisés et 270 Mo disponibles, respectivement). Lorsque les processus ont besoin de cette mémoire, le noyau réduira automatiquement la taille du cache d'E/S.

Lire aussi : 10 commandes « gratuites » utiles pour vérifier l'utilisation de la mémoire Linux

Examiner de plus près les processus

À tout moment, de nombreux processus s’exécutent sur notre système Linux. Nous utiliserons deux outils pour surveiller de près les processus : ps et pstree.

Exemple 7 : Affichage de la liste complète des processus dans votre système avec ps (format standard complet)

En utilisant les options -e et -f combinées en une seule (-ef), vous pouvez lister tous les processus en cours d'exécution sur votre système. Vous pouvez diriger cette sortie vers d'autres outils, tels que grep (comme expliqué dans la première partie de la série LFCS) pour affiner la sortie vers le(s) processus souhaité(s) :

ps -ef | grep -i squid | grep -v grep

La liste des processus ci-dessus affiche les informations suivantes :

propriétaire du processus, PID, PID parent (le processus parent), utilisation du processeur, heure de démarrage de la commande, tty (le ? indique qu'il s'agit d'un démon), le temps CPU cumulé et la commande associée au processus.

Exemple 8 : Personnalisation et tri de la sortie de ps

Cependant, vous n'avez peut-être pas besoin de toutes ces informations et souhaitez afficher le propriétaire du processus, la commande qui l'a démarré, son PID et son PPID, ainsi que le pourcentage de mémoire qu'il utilise actuellement, dans cet ordre, et trier par utilisation de la mémoire par ordre décroissant (notez que ps par défaut est trié par PID).

ps -eo user,comm,pid,ppid,%mem --sort -%mem

Où le signe moins devant %mem indique le tri par ordre décroissant.

Si, pour une raison quelconque, un processus commence à consommer trop de ressources système et qu'il est susceptible de compromettre la fonctionnalité globale du système, vous souhaiterez arrêter ou suspendre son exécution en lui transmettant l'un des signaux suivants à l'aide du programme kill. D'autres raisons pour lesquelles vous envisageriez de procéder ainsi sont lorsque vous avez démarré un processus au premier plan mais que vous souhaitez le suspendre et le reprendre en arrière-plan.

Signal name Signal number Description
 SIGTERM 15  Kill the process gracefully.
 SIGINT 2  This is the signal that is sent when we press Ctrl + C. It aims to interrupt the process, but the process may ignore it.
 SIGKILL 9  This signal also interrupts the process but it does so unconditionally (use with care!) since a process cannot ignore it.
 SIGHUP 1  Short for “Hang UP”, this signals instructs daemons to reread its configuration file without actually stopping the process.
 SIGTSTP 20  Pause execution and wait ready to continue. This is the signal that is sent when we type the Ctrl + Z key combination.
 SIGSTOP 19  The process is paused and doesn’t get any more attention from the CPU cycles until it is restarted.
 SIGCONT 18  This signal tells the process to resume execution after having received either SIGTSTP or SIGSTOP. This is the signal that is sent by the shell when we use the fg or bg commands.
Exemple 9 : Suspendre l'exécution d'un processus en cours et le reprendre en arrière-plan

Lorsque l'exécution normale d'un certain processus implique qu'aucune sortie ne sera envoyée à l'écran pendant son exécution, vous souhaiterez peut-être soit le démarrer en arrière-plan (en ajoutant une esperluette à la fin de la commande).

process_name &

ou,
Une fois qu'il a commencé à s'exécuter au premier plan, mettez-le en pause et envoyez-le en arrière-plan avec

Ctrl + Z
kill -18 PID

Exemple 10 : Tuer de force un processus « devenu sauvage »

Veuillez noter que chaque distribution fournit des outils pour arrêter/démarrer/redémarrer/recharger gracieusement les services courants, tels que service dans les systèmes basés sur SysV ou systemctl dans les systèmes basés sur systemd.

Si un processus ne répond pas à ces utilitaires, vous pouvez le tuer de force en lui envoyant le signal SIGKILL.

ps -ef | grep apache
kill -9 3821

Alors… Que s’est-il passé/se passe-t-il ?

Lorsqu'il y a eu une quelconque panne dans le système (qu'il s'agisse d'une panne de courant, d'une panne matérielle, d'une interruption planifiée ou non planifiée d'un processus, ou de toute anomalie), les journaux dans /var/log sont vos meilleurs amis pour déterminer ce qui s'est passé ou ce qui pourrait être à l'origine des problèmes auxquels vous êtes confronté.

cd /var/log

Certains des éléments de /var/log sont des fichiers texte normaux, d'autres sont des répertoires et d'autres encore sont des fichiers compressés de journaux (historiques) pivotés. Vous voudrez vérifier ceux dont le nom contient le mot erreur, mais inspecter le reste peut également s’avérer utile.

Exemple 11 : Examen des journaux pour détecter les erreurs dans les processus

Imaginez ce scénario. Vos clients LAN ne peuvent pas imprimer sur des imprimantes réseau. La première étape pour résoudre cette situation consiste à accéder au répertoire /var/log/cups et à voir ce qu'il contient.

Vous pouvez utiliser la commande tail pour afficher les 10 dernières lignes du fichier error_log, ou tail -f error_log pour une vue en temps réel du journal.

cd /var/log/cups
ls
tail error_log

La capture d'écran ci-dessus fournit des informations utiles pour comprendre la cause possible de votre problème. Notez que suivre les étapes ou corriger le dysfonctionnement du processus ne résoudra peut-être pas le problème global, mais si vous êtes habitué dès le début à vérifier les journaux chaque fois qu'un problème survient (qu'il soit local ou réseau), vous je serai définitivement sur la bonne voie.

Exemple 12 : Examen des journaux pour détecter les pannes matérielles

Bien que les pannes matérielles puissent être difficiles à dépanner, vous devez vérifier les journaux dmesg et des messages et rechercher les mots associés à un composant matériel présumé défectueux.

L'image ci-dessous est extraite de /var/log/messages après avoir recherché le mot erreur à l'aide de la commande suivante :

less /var/log/messages | grep -i error

Nous pouvons constater que nous rencontrons un problème avec deux périphériques de stockage : /dev/sdb et /dev/sdc, ce qui entraîne à son tour un problème avec la matrice RAID.

Conclusion

Dans cet article, nous avons exploré certains des outils qui peuvent vous aider à toujours être au courant de l’état général de votre système. De plus, vous devez vous assurer que votre système d'exploitation et les packages installés sont mis à jour avec leurs dernières versions stables. Et n’oubliez jamais de vérifier les journaux ! Vous serez alors dans la bonne direction pour trouver la solution définitive à tout problème.

N'hésitez pas à laisser vos commentaires, suggestions ou questions -si vous en avez- en utilisant le formulaire ci-dessous.