Dans le monde de l’informatique, la résolution des problèmes liés aux performances est toujours un défi, et si vous ne connaissez pas les bons outils, la situation est frustrante.
Si vous travaillez en tant que support dans un environnement de production, il est fort probable que vous ayez à traiter des problèmes liés aux performances dans l’environnement Linux. Passons en revue quelques-uns des utilitaires de ligne de commande Linux les plus utilisés pour diagnostiquer les problèmes liés aux performances.
Note : Certaines des commandes listées ci-dessous peuvent ne pas être installées par défaut, vous devez donc les installer manuellement.
lsof
lsof signifie “list open files” (liste des fichiers ouverts) et vous aide à trouver tous les fichiers et processus ouverts, ainsi que la personne qui les a ouverts. L’utilitaire lsof peut s’avérer pratique dans certains cas.
Pour lister tous les fichiers ouverts par un PID particulier.
# lsof -p PID
Comptez le nombre de fichiers et de processus
[root@localhost ~]# lsof -p 4271 | wc -l 34 [root@localhost ~]#
Vérifiez le fichier journal actuellement ouvert
# lsof -p | grep log
Trouvez le numéro de port utilisé par le processus
lsof -i -P |grep $PID
[root@localhost ~]# lsof -i -P |grep 4271 nginx 4271 root 6u IPv4 51306 0t0 TCP *:80 (LISTEN) nginx 4271 root 7u IPv4 51307 0t0 TCP *:443 (LISTEN) [root@localhost ~]#
Consultez d’autres exemples de commandes lsof.
pidstat
pidstat peut être utilisé pour surveiller les tâches gérées par le noyau Linux. Cette commande permet de résoudre facilement les problèmes liés aux entrées/sorties.
Liste des statistiques d’E/S de tous les PID
# pidstat -d
Pour déplacer les statistiques d’E/S d’un PID particulier
# pidstat -p 4271 -d
Si vous effectuez un dépannage en temps réel d’un processus, vous pouvez surveiller les entrées/sorties à intervalles réguliers. Dans l’exemple ci-dessous, les E/S sont surveillées toutes les 5 secondes.
[root@localhost ~]# pidstat -p 4362 -d 5 Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 13/08/2016 _x86_64_ (2 CPU) 07:01:30 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Commande 07:01:35 PM 0 4362 0.00 0.00 0.00 nginx 07:01:40 PM 0 4362 0.00 0.00 0.00 nginx 07:01:45 PM 0 4362 0.00 0.00 0.00 nginx 07:01:50 PM 0 4362 0.00 0.00 0.00 nginx
top
L’une des commandes les plus utilisées sous Linux est probablement top. La commande top peut être utilisée pour afficher des informations sommaires sur le système et l’utilisation actuelle.
La simple exécution de la commande top peut vous montrer l’utilisation du processeur, les détails des processus, un certain nombre de tâches, l’utilisation de la mémoire, un certain nombre de processus zombies, etc.
top - 11:48:43 up 13 jours, 17:25, 1 utilisateur, charge moyenne : 0.00, 0.00, 0.00
Tâches : 90 au total, 2 en cours, 88 en sommeil, 0 arrêté, 0 zombie
%Cpu(s) : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1829.7 total, 388.1 libre, 220.3 utilisé, 1221.4 buff/cache
MiB Swap : 0.0 total, 0.0 libre, 0.0 utilisé. 1369.4 Mem disponibles
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND
1 root 20 0 186820 13400 9092 S 0.0 0.7 0:10.87 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.13 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:07.35 ksoftirqd/0
10 root 20 0 0 0 0 R 0.0 0.0 0:07.30 rcu_sched
11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.50 watchdog/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
16 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
17 root 20 0 0 0 0 S 0.0 0.0 0:00.68 kauditd
18 racine 20 0 0 0 0 S 0.0 0.0 0:00.25 khungtaskd
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
20 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kcompactd0
22 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
23 root 39 19 0 0 0 S 0.0 0.0 0:05.63 khugepaged
24 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 crypto
25 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kintegrityd
26 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd
Pour afficher les détails d’un processus pour un utilisateur spécifique
# top -u nom d'utilisateur
Pour tuer le processus, vous pouvez exécuter top et appuyer sur k
. Le système vous demandera d’entrer le PID à tuer.
top - 11:49:39 up 13 jours, 17:26, 1 utilisateur, charge moyenne : 0.00, 0.00, 0.00
Tâches : 91 au total, 1 en cours, 90 en sommeil, 0 arrêté, 0 zombie
%Cpu(s) : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1829.7 total, 386.9 libre, 221.4 utilisé, 1221.4 buff/cache
MiB Swap : 0.0 total, 0.0 libre, 0.0 utilisé. 1368.3 Mem disponibles
PID à signaler/tuer [pid par défaut = 21261]
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND
5834 nginx 20 0 148712 7428 4800 S 0.0 0.4 0:02.37 nginx
ps
ps est l’acronyme de process status (état du processus ) et est une commande très utilisée pour obtenir un instantané du processus en cours d’exécution. Très utile pour savoir si un processus est en cours d’exécution ou non et, s’il est en cours d’exécution, il affiche le PID.
Pour obtenir le PID et les détails d’un processus à l’aide de certains mots
[root@lab ~]# ps -ef|grep nginx
root 5833 1 0 May24 ? 00:00:00 nginx : master process /usr/sbin/nginx
nginx 5834 5833 0 May24 ? 00:00:02 nginx : processus ouvrier
root 21267 18864 0 11:50 pts/0 00:00:00 grep --color=auto nginx
[root@lab ~]#
tcpdump
Le dépannage des problèmes de réseau est toujours un défi, et l’une des commandes essentielles à utiliser est tcpdump.
Vous pouvez utiliser tcpdump pour capturer les paquets réseau sur une interface réseau.
Pour capturer les paquets sur une interface réseau particulière
[root@lab ~]# tcpdump -i eth0 -w /tmp/capture
tcpdump : listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C9 paquets capturés
16 paquets reçus par le filtre
0 paquets abandonnés par le noyau
[root@lab ~]#
Comme vous pouvez le voir ci-dessus, le flux de trafic sur l’interface eth0
a été capturé.
Pour capturer le trafic réseau entre l’IP source et l’IP destination
# tcpdump src $IP et dst host $IP
Capturez le trafic réseau pour le port de destination 443
# tcpdump dst port 443 tcpdump : type de liaison de données PKTAP tcpdump : sortie verbeuse supprimée, utilisez -v ou -vv pour un décodage complet du protocole écoute sur pktap, lien de type PKTAP (Packet Tap), taille de la capture 262144 octets 12:02:30.833845 IP 192.168.1.2.49950 > ec2-107-22-185-206.compute-1.amazonaws.com.https : Flags [.], ack 421458229, win 4096, length 0 12:02:32.076893 IP 192.168.1.2.49953 > 104.25.133.107.https : Flags [S], seq 21510813, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 353259990 ecr 0,sackOK,eol], length 0 12:02:32.090389 IP 192.168.1.2.49953 > 104.25.133.107.https : Flags [.], ack 790725431, win 8192, length 0 12:02:32.090630 IP 192.168.1.2.49953 > 104.25.133.107.https : Flags [P.], seq 0:517, ack 1, win 8192, length 517 12:02:32.109903 IP 192.168.1.2.49953 > 104.25.133.107.https : Drapeaux [.], ack 147, win 8187, length 0
Lisez le fichier capturé
# tcpdump -r nom du fichier
Ex : pour lire un fichier capturé ci-dessus
# tcpdump -r /tmp/test
En savoir plus sur tcpdump pour capturer et analyser le trafic réseau.
iostat
iostat signifie statistiques d’entrée-sortie et est souvent utilisé pour diagnostiquer un problème de performance avec les périphériques de stockage. Vous pouvez surveiller le rapport d’utilisation du CPU, des périphériques et du système de fichiers réseau avec iostat.
Afficher les statistiques d’E/S du disque
[root@localhost ~]# iostat -d Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 13/08/2016 _x86_64_ (2 CPU) Périphérique : tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 1.82 55.81 12.63 687405 155546 [root@localhost ~]#
Affichez les statistiques de l’unité centrale
[root@localhost ~]# iostat -c Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 13/08/2016 _x86_64_ (2 CPU) avg-cpu : %user %nice %system %iowait %steal %idle 0.59 0.02 0.33 0.54 0.00 98.52 [root@localhost ~]#
ldd
ldd est l’abréviation de list dynamic dependencies (liste des dépendances dynamiques ), qui indique les bibliothèques partagées nécessaires à la bibliothèque. La commande ldd
peut être utile pour diagnostiquer le problème de démarrage de l’application.
Si un programme ne démarre pas parce que les dépendances ne sont pas disponibles, vous pouvez utiliser la commande ldd pour trouver les bibliothèques partagées qu’il recherche.
[root@localhost sbin]# ldd httpd linux-vdso.so.1 => (0x00007ffe7ebb2000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fa4d451e000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fa4d42f9000) libaprutil-1.so.0 => /lib64/libaprutil-1.so.0 (0x00007fa4d40cf000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fa4d3e98000) libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fa4d3c6e000) libdb-5.3.so => /lib64/libdb-5.3.so (0x00007fa4d38af000) libapr-1.so.0 => /lib64/libapr-1.so.0 (0x00007fa4d3680000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa4d3464000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fa4d325f000) libc.so.6 => /lib64/libc.so.6 (0x00007fa4d2e9e000) liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fa4d2c79000) /lib64/ld-linux-x86-64.so.2 (0x00007fa4d4a10000) libuuid.so.1 => /lib64/libuuid.so.1 (0x00007fa4d2a73000) libfreebl3.so => /lib64/libfreebl3.so (0x00007fa4d2870000) [root@localhost sbin]#
netstat
netstat(Network Statistics) est une commande populaire qui permet d’imprimer les connexions réseau, les statistiques des interfaces et de résoudre divers problèmes liés au réseau.
Pour afficher les statistiques de tous les protocoles
# netstat -s
Vous pouvez utiliser grep pour vérifier s’il y a des erreurs
[root@localhost sbin]# netstat -s | grep error 0 erreurs de réception de paquets 0 erreur de réception de tampon 0 erreur de tampon d'envoi [root@localhost sbin]#
Pour afficher la table de routage du noyau
[root@localhost sbin]# netstat -r Table de routage IP du noyau Destination Gateway Genmask Flags MSS Window irtt Iface passerelle par défaut 0.0.0.0 UG 0 0 0 eno16777736 172.16.179.0 0.0.0.0 255.255.255.0 U 0 0 0 0 eno16777736 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 [root@localhost sbin]#
Découvrez d’autres exemples de commandes netstat.
libre
Si votre serveur Linux manque de mémoire ou si vous souhaitez simplement connaître la quantité de mémoire disponible, la commande free vous sera utile.
[root@localhost sbin]# free -g total utilisé libre partagé buff/cache disponible Mémoire 5 0 3 0 1 4 Swap : 5 0 5 [root@localhost sbin]#
–g
signifie que les détails sont affichés en Go. Comme vous pouvez le voir, la mémoire totale disponible est de 5 Go et 3 Go sont libres.
sar
sar(System Activity Report) est utile pour collecter un certain nombre de rapports, notamment sur le processeur, la mémoire et la charge des périphériques.
Il suffit d’exécuter la commande sar
pour connaître l’utilisation du système pendant toute la journée.
Par défaut, le rapport d’utilisation est enregistré au bout de 10 minutes. Si vous avez besoin d’un rapport plus court en temps réel, vous pouvez l’utiliser comme suit.
Affichez le rapport d’utilisation du processeur 3 fois toutes les 3 secondes
[root@localhost sbin]# sar 3 2 Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 13/08/2016 _x86_64_ (2 CPU) 11:14:02 PM CPU %user %nice %system %iowait %steal %idle 11:14:05 PM all 1.83 0.00 0.50 0.17 0.00 97.51 11:14:08 tous 1.50 0.00 0.17 0.00 0.00 98.33 Moyenne : tous 1.67 0.00 0.33 0.08 0.00 97.92 [root@localhost sbin]#
Afficher le rapport d’utilisation de la mémoire
# sar -r
Afficher le rapport sur le réseau
# sar -n ALL
ipcs
ipcs(InterProcess Communication System) fournit un rapport sur les sémaphores, la mémoire partagée et la file d’attente des messages.
Pour afficher la liste de la file d’attente des messages
# ipcs -q
Pour lister les sémaphores
# ipcs -s
Pour afficher la mémoire partagée
# ipcs -m
Pour afficher l’état d’utilisation actuel de l’IPC
[root@localhost sbin]# ipcs -u ------ Messages Status -------- files d'attente allouées = 0 en-têtes utilisés = 0 espace utilisé = 0 octets ------ État de la mémoire partagée -------- segments alloués 5 pages allouées 2784 pages résidentes 359 pages échangées 0 Performance du swap : 0 tentatives 0 succès ------ État des sémaphores -------- tableaux utilisés = 0 sémaphores alloués = 0 [root@localhost sbin]#
ioping
ioping est une commande externe que vous pouvez installer ici. Elle peut s’avérer très pratique pour surveiller la latence des E/S disque en temps réel.
Conclusion
J’espère que les commandes ci-dessus vous aideront dans les différentes situations de votre travail d’administration système. Les commandes mentionnées ci-dessus peuvent être utilisées à la demande. Cependant, si vous avez besoin de surveiller les serveurs Linux en permanence, vous devriez envisager d’utiliser un logiciel de surveillance des serveurs.
Et pour en savoir plus sur les performances de Linux, vous pouvez consulter ce cours Udemy.