1. Surveillance des performances CPU
1.2 Notions de base sur la charge moyenne
La charge moyenne (load average) représente le nombre moyen de processus actifs (en état exécutable ou en état d'attente non interruptible) sur une période donnée. Elle n'a pas de lien direct avec le pourcentage d'utilisation du CPU. On peut la visualiser comme le nombre moyen de processus actifs sur l'unité de temps.
Pour obtenir le nombre de cœurs CPU :
grep -c 'model name' /proc/cpuinfo
Interprétation de la charge (pour un seul cœur, multiplier par le nombre de cœurs pour un système multi-cœurs) :
uptime
# Exemples :
# load < 1 : aucune attente
# load == 1 : le système n'a plus de ressources pour exécuter plus de processus
# load > 1 : les processus sont en file d'attente pour des ressources
Analyse des tendances de charge (valeurs sur 1, 5 et 15 minutes) :
- Exemple 1 : charge_1min > 5, charge_5min < 3, charge_15min < 1 → Surcharge à court terme, libérée à moyen/long terme. Indique une perturbation passagère ou un début d'engorgement.
- Exemple 2 : charge_1min > 5, charge_5min > 3, charge_15min < 1 → Surcharge à court et moyen terme, situation tendue. Probable début d'engorgement.
- Exemple 3 : charge_1min > 5, charge_5min > 5, charge_15min > 5 → Surcharge continue sur toutes les périodes. Le système est engorgé.
- Exemple 4 : charge_1min < 1, charge_5min > 3, charge_15min > 5 → Charge réduite à court terme mais surcharge à moyen/long terme. L'engorgement est en voie d'amélioration.
Sur un système monocœur, une charge moyenne de 1,73 (1 min), 0,60 (5 min) et 7,98 (15 min) indique une surcharge de 73% sur la dernière minute et de 698% sur les 15 dernières minutes. La tendance générale montre une diminution de la charge. Une règle pratique consiste à investiguer lorsque la charge dépasse 70% du nombre total de cœurs CPU, car une charge excessive peut entraîner des ralentissements de réponse des processus.
1.3 Charge moyenne vs. Taux d'utilisation CPU
La charge moyenne inclut les processus en état exécutable (utilisant le CPU) ET ceux en état d'attente non interruptible (attendant des E/S). Le taux d'utilisation CPU (CPU%) ne mesure que le pourcentage de temps où le CPU est occupé.
Les deux métriques peuvent être dissociées :
- Processus gourmands en CPU (CPU-bound) : Augmentent à la fois la charge moyenne et le CPU%.
- Processus gourmands en E/S (I/O-bound) : Augmentent la charge moyenne (attente E/S) sans nécessairement augmenter significativement le CPU%.
- Fort taux d'ordonnancement de processus : Augmente la charge moyenne ET le CPU% (temps passé en contexte kernel).
1.4 Outils de surveillance
Installation des outils nécessaires :
# Sur les systèmes basés sur Debian/Ubuntu
apt update && apt install stress sysstat
# sysstat inclut mpstat et pidstat
Outils principaux :
stress: Outil de test de charge système. Utilisé ici pour simuler des scénarios augmentant la charge moyenne.mpstat: Analyseur de performances CPU multi-cœurs en temps réel.pidstat: Analyseur de performances par processus (CPU, mémoire, E/S, contexte).
Commandes pratiques :
# Vérifier l'existence d'un processus spécifique (ex: nginx)
ps -ef | grep "[n]ginx: master process" | wc -l
# Commande top pour une vue interactive des processus
top
# Raccourcis utiles dans top : t (affichage CPU), M (tri mémoire), k (tuer processus), P (tri CPU%),
# r (priorité), s (intervalle de rafraîchissement), u (filtre utilisateur)
Utilisation de mpstat :
# Afficher les statistiques moyennes de tous les CPUs depuis le démarrage
mpstat
# Surveillance en temps réel, toutes les 5 secondes pour 2 itérations
mpstat -P ALL 5 2
Utilisation de pidstat :
# Surveillance d'un processus spécifique (PID 24615) : CPU (-u), E/S disque (-d), contexte (-w)
pidstat -urd -p 24615
Scénarios de test avec stress
Scénario 1 : Processus gourmand en CPU
# Terminal 1 : Créer une charge CPU de 100% pendant 10 minutes
stress --cpu 1 --timeout 600
# Terminal 2 : Observer la charge moyenne
watch -n 1 uptime
# Terminal 3 : Vérifier la répartition par CPU avec mpstat
mpstat -P ALL 5
Scénario 2 : Processus gourmand en E/S
# Terminal 1 : Générer une pression E/S
stress -i 1 --timeout 600
# Terminal 2 : Observer la charge moyenne
watch -n 1 uptime
# Terminal 3 : Vérifier le CPU% (notamment %iowait)
mpstat -P ALL 5 1
# Terminal 4 : Identifier le processus responsable
pidstat -u 5 1
Scénario 3 : Nombreux processus concurrents
# Terminal 1 : Lancer 8 processus stressants
stress -c 8 --timeout 600
# Terminal 2 : Observer la charge moyenne
watch -n 1 uptime
# Terminal 3 : Analyser la situation avec pidstat
pidstat -u 5 1
1.5 Les changements de contexte CPU (Context Switches)
Un changement de contexte correspond à la sauvegarde de l'état (registres, compteur) d'une tâche et au chargement de l'état d'une autre tâche, permettant de la reprendre.
On distingue principalement :
- Appels système (System Call) : Passage du mode utilisateur au mode noyau. Deux changements de contexte ont lieu (utilisateur → noyau → utilisateur), mais le processus reste le même.
- Processus (Process Context Switch) : Changement complet de processus. Coûteux car implique la sauvegarde/restauration de l'espace mémoire virtuel, de la pile, etc.
- Threads (Thread Context Switch) : Si les threads appartiennent au même processus, seules les données privées (pile, registres) sont échangées, ce qui est moins coûteux.
- Interruptions (Interrupt Context Switch) : Réponse à un événement matériel. Sauvegarde de l'état du processus interrompu pour exécuter le gestionnaire d'interruption.
Surveillance avec vmstat :
# Lancer vmstat toutes les secondes
vmstat 1
# Colonnes clés : cs (changement de contexte/s), r (processus prêts/actifs), b (processus bloqués),
# in (interruptions/s), us/sy/wa/id (utilisation CPU)
Analyse de scénario avec sysbench :
# Installer sysbench
apt install sysbench
# Lancer un test de charge de threads (10 threads, 5 minutes)
sysbench --num-threads=10 --max-time=300 --test=threads run
# Observer l'impact avec vmstat (colonne cs, r, sy)
vmstat 1
# Analyser plus finement avec pidstat (inclure les threads -t)
pidstat -wt 1
Interprétation : Une augmentation soudaine des changements de contexte (cs) combinée à une file d'attente (r) longue et un taux d'utilisation CPU élevé en mode noyau (sy) indique une contention CPU due à un ordonnancement intensif de processus/threads.
1.6 Résolution des problèmes d'utilisation CPU élevée
Lorsque le CPU% est élevé, déterminer si la charge provient du mode utilisateur ou du mode noyau.
Si la charge provient principalement du mode noyau (%sys, %iowait) :
- %iowait élevé : Prioriser l'investigation des opérations d'E/S disque (journaux, bases de données).
- %soft ou %cs élevé : Vérifier le trafic réseau, l'ordonnancement, la complexité du code multi-thread.
- %steal élevé (environnements virtualisés) : Vérifier la charge de l'hôte physique.
Si la charge provient principalement du mode utilisateur (%user) : L'application elle-même nécessite probablement une optimisation.
2. Surveillance des performances mémoire
2.1 Concept : Mémoire virtuelle vs. Physique
Le système d'exploitation gère une abstraction de la mémoire physique grâce à la mémoire virtuelle. Chaque processus dispose de son propre espace d'adressage virtuel (typiquement 4 Go), qui est mappé sur la mémoire physique réelle (et potentiellement sur l'espace d'échange - swap) par le noyau via des tables de pages.
Le processus d'accès à une adresse virtuelle implique :
- Consultation de la table de pages pour traduire l'adresse virtuelle.
- Si la page est en mémoire physique (hit), accès direct.
- Si la page n'est pas en mémoire physique (miss - faute de page/page fault), le noyau doit :
- Charger la page depuis le disque (fichier ou swap) en mémoire physique.
- Possiblement échanger (swap) une page en mémoire physique vers le disque si la mémoire est pleine.
- Mise à jour de la table de pages et reprise de l'opération.
2.2 Buffer vs. Cache (buff/cache)
Commande free -h : Fournit une vue d'ensemble de l'utilisation de la mémoire physique (Mem) et de l'espace d'échange (Swap).
Buffer : Mémoire tampon pour les métadonnées et blocs bruts du système de fichiers, accélérant les E/S disque directes (raw I/O).
Cache (Page Cache) : Mémoire cache pour les données des fichiers lues depuis le disque, accélérant les accès répétés aux fichiers.
La mémoire affichée comme buff/cache est récupérable par les applications si nécessaire (notion de mémoire available).
2.4 Optimisation liée au Buffer/Cache
- Écritures : Le noyau peut agréger et différer les écritures, réduisant le nombre d'opérations disque physiques et permettant aux applications de reprendre leur travail plus tôt.
- Lectures : Les données fréquemment accédées sont gardées en mémoire, réduisant la latence et la charge sur le disque.
3. Surveillance des E/S Fichiers et Disque
3.1 Vue d'ensemble des E/S (I/O)
Le Virtual File System (VFS) fournit une abstraction au-dessus des différents systèmes de fichiers. Une opération d'E/S (de lecture ou d'écriture) entre un processus et un fichier/disque implique généralement deux phases dans le noyau : la préparation des données et la copie vers l'espace du processus.
3.2 Modes d'E/S : Buffered vs. Direct I/O
- Buffered I/O (Standard) : Les données transitent par les buffers du noyau (page cache). Le noyau gère la synchronisation avec le disque. Avantages : simplicité, performances accrues pour les accès répétés. Inconvénient : copie supplémentaire entre espace noyau et espace utilisateur.
- Direct I/O : Le processus lit/écrit directement depuis/vers le disque, contournant les caches du noyau. Utilisé par des applications comme les systèmes de bases de données qui gèrent leur propre cache pour un contrôle plus fin. Avantage : évite une copie mémoire. Inconvénient : latence plus élevée pour les petits accès, gestion complexe.
3.3 Outils de surveillance des E/S disque
iostat (paquet sysstat) : Affiche les statistiques d'utilisation CPU et d'E/S des périphériques blocs.
# Statistiques de base des disques (en Ko/s), mise à jour toutes les 2 secondes
iostat -d -k 2
# Statistiques étendues (-x), mise à jour toutes les secondes
iostat -d -x 1
Indicateurs clés de iostat -x :
rrqm/s, wrqm/s: Requêtes E/S fusionnées par seconde.r/s, w/s: Opérations de lecture/écriture par seconde (IOPS).rkB/s, wkB/s: Débit de lecture/écriture en Ko/s.await: Temps moyen d'attente par opération E/S (en ms).%util: Pourcentage de temps où le périphérique était occupé (proche de 100% indique un possible goulot d'étranglement).
swapon -s : Affiche les partitions/espace d'échange (swap) utilisés et leur statut.
df -h : Affiche l'espace utilisé et disponible sur les systèmes de fichiers montés.
du -sh : Estime l'espace disque utilisé par des fichiers ou répertoires. Options courantes : -h (lisible), -s (résumé), -c (total).
4. Surveillance des performances réseau
4.1 Métriques de performence réseau
- Bande passante (Bandwidth) : Débit maximal théorique d'un lien (ex: 1 Gbps).
- Débit (Throughput) : Débit réellement transféré (ex: 500 Mbps). Le rapport Débit/Bande passante donne le taux d'utilisation.
- Latence (Delay) : Temps de réponse (ex: temps d'établissement de connexion TCP, RTT pour un paquet aller-retour).
- PPS (Packets Per Second) : Nombre de paquets traités par seconde, indicateur de performance de commutation/routage.
4.2 Configuration et statistiques des interfaces
Outils modernes : ip (de iproute2)
# Afficher les adresses et statistiques de l'interface ens33
ip -s link show ens33
Points clés à vérifier :
- État de l'interface (
UP,LOWER_UP). - MTU (Maximum Transmission Unit).
- Compteurs d'erreurs, de paquets rejetés (
errors,dropped,overruns).
4.3 Informations sur les sockets et connexions
Outils recommandés : ss (plus rapide et moderne que netstat).
# Afficher les sockets TCP en écoute avec les processus associés
ss -ltnp
# Afficher les statistiques de synthèse par protocole
ss -s
Interprétation des files d'attente (Recv-Q, Send-Q) selon l'état de la socket (ESTAB ou LISTEN).
4.4 Surveillance du trafic et de la connectivité
sar -n DEV 1 : Surveille les métriques des interfaces réseau en temps réel (rxpck/s, txpck/s, rxkB/s, txkB/s).
ping [cible] : Teste la connectivité de base et mesure le RTT/mdev (écart-type du RTT).
traceroute [cible] : Trace le chemin des paquets vers une destination.
mtr [cible] : Combine les fonctionnalités de ping et traceroute avec des statistiques continues.
4.5 Analyse et diagnostic réseau avancé
tcpdump : Outil d'analyse de paquets (packet sniffer) en ligne de commande.
# Capturer 100 paquets sur l'interface eth0
tcpdump -i eth0 -c 100
# Capturer le trafic DNS (port 53)
tcpdump -i any port 53
nmap : Scanner les ports et services d'un hôte (utilisation éthique requise).
# Scanner les ports TCP ouverts sur localhost
nmap -sT localhost
lsof -i :[port] : Voir quel processus écoute sur un port spécifique.
5. Outils de surveillance système généraux
5.1 nmon
Outil de surveillance en temps réel qui affiche de manière interactive les performances CPU, mémoire, réseau et disque. Possibilité de générer des rapports pour analyse ultérieure.
Installation et utilisation basique :
# Exemple d'installation sur Debian/Ubuntu (télécharger le binaire approprié)
wget https://sourceforge.net/projects/nmon/files/nmon_linux_16g_binaries.zip
unzip nmon_linux_16g_binaries.zip
chmod +x nmon_x86_64_ubuntu18
./nmon_x86_64_ubuntu18
5.2 glances
Moniteur système avancé avec une interface en ligne de commande riche (couleurs, graphiques). Offre une vue globale des performances.
# Installation sur Debian/Ubuntu
apt install glances
# Lancement
glances
6. Surveillance des journaux (logs)
6.1 Visualisation en temps réel avec tail et colorisation
# Suivre un fichier de log et coloriser les niveaux (WARN en jaune, ERROR en rouge)
tail -f /var/log/syslog | sed --unbuffered -e 's/\(WARN\)/\o033[33m\1\o033[0m/g' -e 's/\(ERROR\)/\o033[31m\1\o033[0m/g'
# Alternative plus simple avec grep --color
tail -f /var/log/syslog | grep --color=always -E "(ERROR|WARN|INFO)"
6.2 Outils de visualisation multi-fichiers
Des outils comme
multitailpermettent d'afficher plusieurs fichiers de log simultanément dans des fenêtres séparées.
# Installation (exemple pour Debian/Ubuntu)
apt install multitail
# Lancer l'outil et sélectionner les fichiers à suivre
multitail /var/log/auth.log /var/log/kern.log
6.3 Outils de conversion de fichiers (lignes de fin)
Les fichiers créés sous Windows ont des fins de ligne différentes (CRLF) de ceux sous Unix/Linux (LF). Des utilitaires permettent la conversion.
# Convertir un fichier du format Windows vers Unix
dos2unix fichier_converti.txt
# Convertir du format Unix vers Windows
unix2dos fichier_converti.txt
# Convertir tous les fichiers d'un répertoire
find . -type f -exec dos2unix {} \;