Les Suspects Habituels : iostat, vmstat et dstat

Commençons par la sainte trinité des outils de surveillance des performances :

1. iostat : Le Détective I/O

Quand les entrées/sorties disque vous donnent des maux de tête, iostat est votre aspirine. Cet outil pratique vous offre un aperçu de l'utilisation du CPU et des statistiques I/O pour tous vos appareils.

$ iostat -xz 1
Linux 5.4.0-42-generic (monserveur)     15/06/2023     _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.43    0.00    1.22    0.31    0.00   96.04

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
sda              0.35    2.13     14.44     34.96     0.00     0.57   0.00  21.05    0.57    2.50   0.01    41.54    16.43   0.40   0.10

Que nous dit ce rapport ? Eh bien, notre système est plutôt inactif. Le CPU est en attente 96% du temps, et notre disque (sda) est à peine utilisé avec seulement 0,10% d'utilisation.

2. vmstat : Le Maestro de la Mémoire

vmstat est votre fenêtre sur l'âme de la mémoire de votre système. Il vous montre tout, de la longueur de la file d'attente d'exécution à l'utilisation du swap.

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 6981496 191268 724132    0    0     3     5   36   79  2  1 97  0  0
 0  0      0 6981496 191268 724132    0    0     0     0  209  355  1  0 99  0  0

Regardez cette colonne free - nous avons environ 7 Go de mémoire libre. Pas étonnant que notre système soit si détendu !

3. dstat : Le Touche-à-tout

Si iostat et vmstat avaient un enfant, ce serait dstat. Cet outil polyvalent combine les statistiques CPU, disque, réseau, pagination et système en une seule sortie colorée.

$ dstat -cdngy
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw 
  2   1  97   0   0|  14k   40k|   0     0 |   0     0 | 237   420 
  1   0  99   0   0|   0     0 |  66B  722B|   0     0 | 206   357 
  1   0  99   0   0|   0     0 |  60B  722B|   0     0 | 208   355 

Voilà ce que j'appelle un guichet unique pour les statistiques système !

Creuser Plus Profond : Les Héros Méconnus

Mais attendez, il y a plus ! Explorons quelques outils moins connus mais tout aussi puissants :

4. sar : Le Voyageur du Temps

sar (System Activity Reporter) est comme une machine à remonter le temps pour vos statistiques système. Il peut vous montrer des données historiques et même générer de jolis graphiques.

$ sar -u 1 3
Linux 5.4.0-42-generic (monserveur)     15/06/2023     _x86_64_    (4 CPU)

13:00:01        CPU     %user     %nice   %system   %iowait    %steal     %idle
13:00:02        all      2.01      0.00      0.75      0.25      0.00     96.98
13:00:03        all      1.75      0.00      0.75      0.00      0.00     97.49
13:00:04        all      1.75      0.00      0.75      0.25      0.00     97.24
Average:        all      1.84      0.00      0.75      0.17      0.00     97.24

Conseil de pro : Utilisez sar -A pour voir TOUTES les statistiques. Mais attention, c'est comme boire à une lance à incendie !

5. perf : Le Puissant Outil de Profilage

Quand vous devez aller plus loin, perf est votre équipement de spéléologie. Il peut profiler l'utilisation du CPU, tracer les appels système et même analyser les erreurs de cache.

$ sudo perf top
Samples: 42K of event 'cpu-clock', 4000 Hz, Event count (approx.): 5250000000 lost: 0/0 drop: 0/0
Overhead  Shared Object                    Symbol
   7.89%  [kernel]                         [k] _raw_spin_unlock_irqrestore
   4.32%  [kernel]                         [k] finish_task_switch
   3.21%  [kernel]                         [k] __schedule
   2.96%  [kernel]                         [k] schedule

Regardez ça ! La fonction _raw_spin_unlock_irqrestore du noyau utilise presque 8% de notre CPU. Il est peut-être temps de plonger dans le code du noyau ?

L'Intrigue S'épaissit : Visualiser les Performances

Parfois, une image vaut mille sorties strace. Voici quelques outils graphiques :

6. htop : Le Visualiseur de Processus Interactif

Pensez à top sous stéroïdes. htop vous offre une vue colorée et interactive de vos processus.

htop screenshot
htop en action : Un régal pour les yeux et un buffet pour le cerveau.

7. atop : Le Moniteur de Système et de Processus

atop est comme le cousin surdoué de top. Il affiche des compteurs au niveau du système et des statistiques par processus en une seule vue.

$ atop
ATOP - monserveur                        2023/06/15  13:15:23                        ------------------------------
PRC | sys    1.85s | user   3.70s | #proc    213 | #zombie    0 | #exit      0 |
CPU | sys       2% | user      4% | irq       0% | idle    94% | wait      0% |
CPL | avg1    0.02 | avg5    0.05 | avg15   0.05 | csw    53592 | intr   43357 |
MEM | tot    15.5G | free    6.8G | cache 724.7M | buff  191.3M | slab  409.8M |
SWP | tot    15.9G | free   15.9G |              | vmcom   4.7G | vmlim  23.7G |
DSK |          sda | busy      0% | read     131 | write    644 | avio 2.50 ms |
NET | transport    | tcpi      37 | tcpo      36 | udpi       0 | udpo       0 |
NET | network      | ipi       37 | ipo       36 | ipfrw      0 | deliv     37 |
NET | eth0    ---- | pcki      19 | pcko      18 | si    1 Kbps | so    1 Kbps |

  PID SYSCPU USRCPU   VGROW  RGROW  RDDSK  WRDSK  ST EXC  S  CPU CMD       1/600
 1829  0.37s  0.73s      0K     0K     0K     0K  --   -  R   1% atop
    1  0.02s  0.03s      0K     0K     0K     0K  --   -  S   0% systemd

Voilà ce que j'appelle une surcharge d'informations !

L'Ingrédient Secret : Scripts de Surveillance Personnalisés

Parfois, les outils standards ne suffisent pas. C'est là que vous retroussez vos manches et écrivez vos propres scripts de surveillance. Voici un exemple simple qui combine les données de iostat et vmstat :


#!/usr/bin/env python3

import subprocess
import time

def get_iostat():
    output = subprocess.check_output("iostat -c 1 1 | tail -n 2 | head -n 1", shell=True).decode()
    cpu_stats = output.split()
    return float(cpu_stats[5])  # %idle

def get_vmstat():
    output = subprocess.check_output("vmstat 1 2 | tail -n 1", shell=True).decode()
    stats = output.split()
    return int(stats[3])  # free memory

while True:
    cpu_idle = get_iostat()
    free_mem = get_vmstat()
    print(f"CPU Idle: {cpu_idle}%, Free Memory: {free_mem}K")
    time.sleep(5)

Lancez ce script, et vous avez votre propre mini-système de surveillance !

À Retenir : Devenez le Sherlock Holmes de la Performance Système

Surveiller les systèmes Linux à bas niveau, c'est comme être un détective dans un roman cyberpunk. Vous avez vos outils (iostat, vmstat, dstat), votre loupe (perf), et votre Watson (scripts personnalisés). La clé est de savoir quel outil utiliser quand, et comment interpréter les résultats.

Rappelez-vous :

  • Commencez par les bases (iostat, vmstat, dstat) pour un aperçu rapide
  • Plongez plus profondément avec des outils spécialisés comme perf si nécessaire
  • Visualisez les données avec htop et atop pour une perspective différente
  • N'ayez pas peur d'écrire des scripts personnalisés pour vos besoins spécifiques

Et surtout, pratiquez, pratiquez, pratiquez ! Plus vous surveillez de systèmes, mieux vous serez à repérer les anomalies et à résoudre les énigmes de performance.

Réflexion

"L'outil de débogage le plus efficace reste la réflexion attentive, couplée à des instructions print judicieusement placées." — Brian Kernighan

Bien que nous ayons tous ces outils sophistiqués à notre disposition, parfois la meilleure approche est de prendre du recul, de réfléchir de manière critique au problème, et peut-être d'ajouter quelques instructions echo stratégiques. Ne laissez pas les outils éclipser vos compétences en résolution de problèmes !

Et Après ?

Maintenant que vous êtes armé de ces connaissances, pourquoi ne pas configurer un environnement de test et commencer à expérimenter ? Essayez de simuler différents scénarios de charge et voyez comment ces outils réagissent. Ou mieux encore, appliquez ces techniques à un problème réel que vous rencontrez. La preuve du pudding est dans le manger, après tout !

Bonne surveillance, et que vos systèmes soient toujours performants !