Introduction
L'optimisation des performances Linux est la pratique qui consiste à identifier et résoudre systématiquement les goulots d'étranglement afin d'améliorer la réactivité et le débit du système. Ce guide fournit des techniques pratiques et concrètes pour les développeurs, les ingénieurs DevOps et les équipes techniques qui doivent diagnostiquer et optimiser les systèmes Linux. Il couvre les commandes essentielles, des exemples concrets et une méthodologie sûre pour observer, modifier et vérifier les améliorations.
L'accent est mis sur la sécurité opérationnelle : toujours observer l'état actuel avant d'apporter des modifications, comprendre le rayon d'impact de toute modification, utiliser des espaces réservés au lieu de secrets réels, vérifier les résultats et documenter les étapes de récupération. Cette approche minimise les risques et garantit que les améliorations de performances sont mesurables et réversibles.
Inventaire de la version et de l'environnement
Avant tout réglage, documentez l'environnement. Cela inclut la distribution Linux, la version du noyau, les détails matériels et les versions logicielles pertinentes. Connaître les versions exactes est essentiel car les paramètres de réglage et le comportement des outils peuvent varier considérablement selon les versions.
Prérequis
- Accès à un système Linux avec les privilèges sudo ou root pour les modifications au niveau du système.
- Familiarité de base avec la ligne de commande et les éditeurs de texte.
- Une compréhension claire de la charge de travail de l'application (par exemple, serveur web, base de données).
Commandes pour capturer l'état actuel
# Distribution et version
cat /etc/os-release
# Version du noyau
uname -r
# Informations sur le CPU
lscpu
# Informations sur la mémoire
free -h
# Disposition des disques et des systèmes de fichiers
lsblk
# Interfaces réseau
ip -brief address
Exemple de sortie (extrait) :
$ uname -r
5.15.0-91-generic
$ free -h
total used free shared buff/cache available
Mem: 15Gi 2.1Gi 11Gi 234Mi 1.8Gi 12Gi
Swap: 2.0Gi 0B 2.0Gi
Cet inventaire établit une base de référence. Horodatez toujours vos observations (par exemple, date >> baseline.txt) pour corréler les modifications avec les métriques de performance au fil du temps.
Rayon d'impact et récupération Lorsque vous modifiez les paramètres du système, sachez quels fichiers ou services sont affectés. Par exemple, modifier /etc/sysctl.conf affecte les paramètres du noyau globalement. Sauvegardez toujours le fichier original :
sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak-$(date +%Y%m%d)
Si une modification cause des problèmes, restaurez la sauvegarde et redémarrez ou rechargez la configuration.
Chemin de configuration sûr
Le réglage doit suivre un processus sûr et incrémental :
- Identifier le goulot d'étranglement à l'aide des outils de surveillance (voir Vérification et diagnostics).
- Rechercher le paramètre approprié pour votre version du noyau et votre charge de travail.
- Faire une modification à la fois dans un environnement de test d'abord.
- Appliquer la modification en utilisant la méthode appropriée (par exemple, sysctl, unité systemd, fichier de configuration).
- Vérifier l'effet avec des benchmarks ou des métriques de production.
- Documenter la modification et sa procédure de retour en arrière.
Exemple : Ajustement de la swappiness La swappiness contrôle l'agressivité avec laquelle le noyau échange les pages mémoire vers le disque. Une valeur plus basse conserve plus de données en RAM, ce qui peut améliorer les performances pour les applications gourmandes en mémoire, mais peut augmenter le risque d'OOM si la RAM est épuisée.
Observation Vérifier la swappiness actuelle :
cat /proc/sys/vm/swappiness
La valeur par défaut est souvent 60. Pour un serveur de base de données, vous pourriez vouloir 10.
Modification (temporaire, jusqu'au redémarrage)
sudo sysctl vm.swappiness=10
Modification permanente Ajoutez à /etc/sysctl.conf ou à un fichier dans /etc/sysctl.d/ :
vm.swappiness=10
Puis appliquez :
sudo sysctl -p
Vérification
cat /proc/sys/vm/swappiness
# Sortie : 10
Récupération Si la modification cause une instabilité (par exemple, le tueur OOM s'active), revenez en arrière en remettant la valeur à 60 et en supprimant la ligne du fichier de configuration.
Vérification et diagnostics
Le diagnostic des problèmes de performance nécessite une approche méthodique. Commencez par des outils de haut niveau pour identifier le sous-système sous pression, puis approfondissez.
Surveillance à l'échelle du système
- top / htop : Vue en temps réel de l'utilisation du CPU et de la mémoire. Recherchez les processus avec un %CPU ou %MEM élevé.
- vmstat : Rapporte des statistiques de mémoire virtuelle, d'activité CPU et d'E/S.
vmstat 1 5 # intervalle d'1 seconde, 5 échantillons
Colonnes de sortie : r (file d'exécution), b (bloqué), si/so (swap in/out), us/sy/id (CPU utilisateur/système/inactif).
- iostat : Statistiques d'E/S disque.
iostat -x 1 5
Recherchez un %util élevé (saturation du périphérique) et un await élevé (latence d'E/S).
- sar : Collecte et rapporte l'activité du système. Installez
sysstats'il n'est pas présent.
sar -u 1 5 # Utilisation CPU
sar -r 1 5 # Utilisation mémoire
sar -n DEV 1 5 # Périphériques réseau
Diagnostic d'un goulot d'étranglement CPU
Si vmstat montre un r élevé (file d'exécution) et un us élevé (CPU utilisateur), un processus est limité par le CPU. Identifiez le processus avec top puis utilisez perf pour le profiler :
sudo perf top
# Ou pour un PID spécifique :
sudo perf record -p <PID> -g -- sleep 10
sudo perf report
Diagnostic d'un goulot d'étranglement mémoire
Un si/so élevé (activité de swap) indique une pression mémoire. Utilisez free -h pour vérifier la mémoire disponible et ps aux --sort=-%mem | head pour trouver les processus gourmands en mémoire. Vérifiez également les fuites de mémoire avec des outils comme valgrind ou pmap.
Diagnostic d'un goulot d'étranglement E/S
Si iostat montre un %util et un await élevés, le disque est un goulot d'étranglement. Utilisez iotop pour voir quels processus génèrent des E/S. Envisagez d'optimiser avec un stockage plus rapide, d'ajuster le planificateur d'E/S ou d'utiliser un cache RAM.
Diagnostic d'un goulot d'étranglement réseau
Utilisez ss -s pour les statistiques de socket et nload ou iftop pour la surveillance de la bande passante. Une perte de paquets ou des retransmissions élevées peuvent être vérifiées avec netstat -s ou ss -ti.
Exemple concret : Détection de la limitation CPU
Supposons qu'une application soit lente. Exécutez top et observez %Cpu(s): 99.0 us. Ensuite, exécutez vmstat 1 5 :
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 1200000 200000 300000 0 0 0 10 500 1000 99 1 0 0 0
4 0 0 1190000 200000 300000 0 0 0 0 500 1100 99 1 0 0 0
Le r élevé (4) et le us (99) confirment la saturation du CPU. Identifiez le processus et profilez avec perf pour trouver les fonctions chaudes.
Modes de défaillance et récupération
Même avec un réglage minutieux, des défaillances peuvent survenir. Comprendre les modes de défaillance courants vous aide à récupérer rapidement.
Erreur de configuration Une faute de frappe dans un fichier de configuration peut empêcher un service de démarrer. Validez toujours la syntaxe de la configuration avant de l'appliquer :
# Pour les fichiers d'unité systemd :
systemd-analyze verify /etc/systemd/system/myapp.service
# Pour les paramètres sysctl, vérifiez les erreurs lors de l'application :
sudo sysctl -p
# Pour nginx :
sudo nginx -t
Panique du noyau ou échec de démarrage Si une modification des paramètres de démarrage (par exemple, dans GRUB) empêche le démarrage, utilisez un disque de secours ou démarrez sur un noyau précédent depuis le menu GRUB. Gardez toujours un noyau connu comme bon installé.
Épuisement des ressources Le réglage pour la performance peut épuiser par inadvertance les ressources. Par exemple, définir vm.overcommit_memory=2 limite strictement le sur-allocation de mémoire ; si une application demande plus de mémoire que disponible, elle peut échouer. Surveillez avec dmesg les messages du tueur OOM :
dmesg | grep -i "out of memory"
Récupération : ajustez le paramètre ou augmentez la RAM/le swap.
Mauvaise configuration réseau Modifier les paramètres TCP (par exemple, net.ipv4.tcp_fin_timeout) peut entraîner des connexions qui persistent ou se coupent prématurément. Testez toujours les modifications réseau dans un environnement de préproduction et surveillez avec ss -s et netstat -s.
Stratégie de retour en arrière
- Gardez des sauvegardes de tous les fichiers de configuration modifiés avec des horodatages.
- Documentez la modification exacte et son effet attendu.
- Utilisez des outils de gestion de configuration (Ansible, Puppet) pour versionner les modifications.
- Pour les paramètres du noyau, notez que les modifications temporaires sont effacées au redémarrage, donc un redémarrage peut être un retour en arrière rapide si les modifications permanentes causent des problèmes.
Liste de contrôle opérationnelle
Utilisez cette liste de contrôle avant et après toute modification de réglage de performance.
Liste de contrôle pré-modification
| Élément | Description | Responsable | Fréquence |
|---|---|---|---|
| Sauvegarder la configuration actuelle | Copier les fichiers pertinents (par exemple, /etc/sysctl.conf, /etc/nginx/nginx.conf) avec horodatage. | Administrateur système (Priya Shah) | À chaque modification |
| Enregistrer les métriques de base | Utiliser sar/vmstat/iostat pour capturer CPU, mémoire, E/S, réseau pendant au moins 10 minutes. | Ingénieur performance (Carlos Gomez) | Avant chaque modification |
| Identifier la procédure de retour en arrière | Documenter les commandes exactes pour revenir en arrière (par exemple, restaurer la sauvegarde, redémarrer). | Administrateur système (Priya Shah) | À chaque modification |
| Tester en préproduction | Appliquer la modification dans un environnement hors production et exécuter des tests de charge. | Responsable QA (Aisha Khan) | À chaque modification |
Vérification post-modification
| Élément | Description | Responsable | Fréquence |
|---|---|---|---|
| Comparer les métriques | Exécuter la même surveillance que la base et comparer avec les métriques précédentes. | Ingénieur performance (Carlos Gomez) | Après modification |
| Vérifier les journaux pour les erreurs | Examiner les journaux système (/var/log/syslog, journaux d'application) pour les avertissements. | Administrateur système (Priya Shah) | Après modification |
| Valider le retour en arrière | En préproduction, effectuer le retour en arrière et s'assurer que le système revient à l'état précédent. | Responsable QA (Aisha Khan) | Après modification |
Cette liste de contrôle garantit que les modifications sont sûres, réversibles et surveillées par des personnes responsables.
Pièges courants et comment les éviter
Pourquoi cela arrive : Désir de résoudre plusieurs problèmes rapidement. Comment l'éviter : Modifiez un paramètre, mesurez, puis continuez. Utilisez une approche d'expérience contrôlée.
- Modifier trop de paramètres à la fois
Pourquoi cela arrive : Supposer que vous connaissez l'état normal du système. Comment l'éviter : Collectez toujours des métriques de base avant le réglage. Sans base, vous ne pouvez pas prouver l'amélioration ni diagnostiquer la régression.
- Ignorer les données de base
Pourquoi cela arrive : Deviner sur la base des symptômes plutôt que des métriques. Comment l'éviter : Utilisez une surveillance systématique (vmstat, iostat, sar) pour identifier le goulot d'étranglement réel. Par exemple, un CPU élevé peut être causé par l'attente d'E/S, pas par un traitement limité par le CPU.
- Régler pour le mauvais goulot d'étranglement
Pourquoi cela arrive : Excès de confiance ou pression du temps. Comment l'éviter : Appliquez d'abord les modifications temporairement (par exemple, sysctl -w), testez, puis rendez-les permanentes si elles réussissent.
- Modifications permanentes sans test
Pourquoi cela arrive : Sous-estimer les besoins futurs de dépannage. Comment l'éviter : Tenez un journal des modifications avec la date, le paramètre, l'ancienne valeur, la nouvelle valeur, la raison et les étapes de retour en arrière.
- Ne pas documenter les modifications
Pourquoi cela arrive : Le réglage des performances se concentre souvent uniquement sur la vitesse. Comment l'éviter : Assurez-vous que les modifications n'affaiblissent pas la sécurité (par exemple, désactiver les cookies SYN pour améliorer le taux de connexion peut exposer à des inondations SYN).
- Négliger les implications de sécurité
Conclusion
L'optimisation des performances Linux est un processus discipliné qui nécessite observation, modification prudente et vérification. En suivant le chemin de configuration sûr, en utilisant les bons outils de diagnostic et en adhérant à une liste de contrôle opérationnelle, vous pouvez améliorer les performances du système tout en minimisant les risques. Documentez toujours les modifications, testez en préproduction et ayez un plan de retour en arrière. Ce guide a fourni des commandes pratiques et des exemples pour vous lancer, mais la clé est de développer un état d'esprit méthodique : mesurez, modifiez, vérifiez et apprenez.
Comme prochaine étape, choisissez un sous-système (CPU, mémoire, E/S ou réseau) et établissez une base de référence en utilisant les outils décrits. Ensuite, appliquez un seul paramètre de réglage dans un environnement de test et observez l'effet. Au fil du temps, cette pratique renforcera votre expertise et conduira à une infrastructure Linux plus stable et efficace.