Dépannage de l'épuisement des ressources sous Linux : CPU, Mémoire et Espace Disque
Les systèmes Linux sont réputés pour leur stabilité et leur efficacité, mais comme tout système d'exploitation, ils peuvent souffrir d'une dégradation des performances due à l'épuisement des ressources. Cela se manifeste souvent par un système lent, des applications qui ne répondent plus ou des plantages purs et simples. Comprendre les causes courantes et les méthodes de dépannage efficaces pour l'utilisation excessive du CPU, les fuites de mémoire et les partitions disque pleines est crucial pour tout administrateur système Linux ou utilisateur avancé. Cet article vous guidera à travers l'identification de ces goulots d'étranglement et la mise en œuvre de solutions pour restaurer les performances optimales du système.
L'épuisement des ressources peut avoir un impact significatif sur l'expérience utilisateur et les services critiques. En surveillant et en traitant ces problèmes de manière proactive, vous pouvez prévenir les temps d'arrêt, améliorer la réactivité des applications et assurer la santé globale de votre environnement Linux. Nous explorerons les outils de ligne de commande essentiels et les approches systématiques pour diagnostiquer et résoudre ces problèmes courants.
Identifier le coupable : Surveillance des ressources système
Avant de pouvoir résoudre un problème d'épuisement des ressources, vous devez identifier quelle ressource est surutilisée et quel processus en est responsable. Linux fournit une riche collection d'outils en ligne de commande à cette fin.
Surveillance de l'utilisation du CPU
Une utilisation élevée du CPU peut rendre votre système lent et non réactif. Elle est souvent causée par un processus incontrôlable, une application exigeante ou un script inefficace.
-
top: C'est un moniteur système en temps réel indispensable. Il affiche une liste dynamique des processus, triée par utilisation du CPU par défaut. Vous pouvez voir l'utilisation globale du CPU, l'utilisation de la mémoire et les détails des processus individuels.
bash top
Danstop, appuyez sur1pour voir l'utilisation de chaque cœur de CPU. Appuyez surPpour trier par utilisation du CPU. Recherchez les processus consommant constamment un pourcentage élevé du CPU. -
htop: Une version améliorée et interactive detop. Il est souvent préféré pour sa convivialité, son affichage coloré et sa navigation plus facile.
bash htop
Similaire àtop,htoppermet de trier par utilisation du CPU et fournit des informations détaillées sur les processus. -
mpstat: Faisant partie du paquetsysstat,mpstatfournit des statistiques détaillées sur le CPU, y compris l'utilisation par processeur, les comptes d'interruptions et les changements de contexte.
bash mpstat -P ALL 1
Cette commande affichera les statistiques du CPU pour tous les cœurs chaque seconde.
Surveillance de l'utilisation de la mémoire
Lorsqu'un système manque de RAM physique et d'espace d'échange disponibles, il commence à utiliser l'espace disque comme mémoire virtuelle, ce qui est considérablement plus lent, entraînant une grave dégradation des performances.
-
free -h: Affiche la quantité totale de mémoire physique et d'échange libre et utilisée dans le système, ainsi que les tampons et les caches utilisés par le noyau. L'indicateur-hrend la sortie lisible par l'homme (par exemple, Mo, Go).
bash free -h
Portez attention à la mémoireavailable(disponible) et à l'espace d'échangeused(utilisé). Une utilisation élevée de l'échange indique une RAM insuffisante. -
top/htop:topethtopaffichent tous deux l'utilisation de la mémoire par processus. Recherchez les processus ayant une valeur%MEMélevée. -
vmstat: Signale les statistiques de mémoire virtuelle. Il peut afficher des informations sur les processus, la mémoire, la pagination, les E/S de bloc, les pièges et l'activité du CPU.
bash vmstat 5
Cette commande rapportera les statistiques toutes les 5 secondes. Regardez les colonnessi(swap-in) etso(swap-out) ; des valeurs élevées indiquent un échange de mémoire important.
Surveillance de l'espace disque
Une partition disque pleine peut empêcher les applications d'écrire des données, provoquer des erreurs et même empêcher le système de démarrer.
-
df -h: Signale l'utilisation de l'espace disque des systèmes de fichiers. L'indicateur-hrend la sortie lisible par l'homme.
bash df -h
Cette commande listera tous les systèmes de fichiers montés et affichera leur taille totale, l'espace utilisé, l'espace disponible et le point de montage. Recherchez les partitions à 100 % d'utilisation ou proches. -
du -sh <répertoire>: Estime l'utilisation de l'espace disque pour un répertoire donné. L'indicateur-srésume, et-hle rend lisible par l'homme.
bash du -sh /var/log/*
Utilisez ceci pour trouver quels sous-répertoires consomment le plus d'espace disque.
Résolution des problèmes d'épuisement des ressources
Une fois que vous avez identifié la ressource problématique et le processus fautif, vous pouvez prendre des mesures pour résoudre le problème.
Traitement de l'utilisation élevée du CPU
- Identifier le processus: Utilisez
topouhtoppour trouver l'ID de processus (PID) consommant beaucoup de CPU. - Enquêter sur le processus: Déterminez ce qu'est le processus. Est-ce une application utilisateur, un service système ou quelque chose d'inattendu ?
- Utilisation élevée légitime: Si une application légitime utilise beaucoup de CPU (par exemple, compilation de logiciels, encodage vidéo), vous devrez peut-être attendre sa fin, la planifier en dehors des heures de pointe ou mettre à niveau votre matériel.
- Processus incontrôlable: Si un processus est bloqué dans une boucle ou consomme un CPU excessif de manière non intentionnelle, vous pouvez essayer de le redémarrer. Si cela ne fonctionne pas, vous devrez peut-être le terminer.
-
Terminer le processus (À utiliser avec prudence !): Vous pouvez utiliser la commande
killpour envoyer des signaux aux processus. Les signaux les plus courants sont :SIGTERM(15) : Demande poliment au processus de se terminer.SIGKILL(9) : Termine le processus de force immédiatement. Ce doit être un dernier recours car il ne permet pas au processus de se nettoyer.
```bash
Terminer gracieusement le processus avec le PID 1234
kill 1234
Terminer de force le processus avec le PID 1234
kill -9 1234
`` 4. **Vérifier les journaux**: Examinez les journaux système (par exemple,/var/log/syslog,/var/log/messages`, les journaux spécifiques à l'application) pour détecter les erreurs liées au processus problématique.
5. Optimiser les applications/scripts: Si l'utilisation élevée du CPU est due à une application ou un script inefficace, envisagez d'optimiser le code ou la configuration.
Résolution des fuites de mémoire et de l'épuisement
Une fuite de mémoire se produit lorsqu'un programme ne parvient pas à libérer la mémoire dont il n'a plus besoin, consommant progressivement toute la RAM disponible. Cela peut entraîner un échange excessif et une non-réactivité du système.
- Identifier le processus: Utilisez
topouhtoppour trouver les processus avec des valeurs élevées de mémoire (%MEM) ou de taille de résidence (RSS) qui augmentent régulièrement au fil du temps. - Enquêter sur le processus: Déterminez la nature de l'application. S'agit-il d'une application connue avec des problèmes de mémoire potentiels, ou de quelque chose de personnalisé ?
- Redémarrer l'application/le service: Souvent, le simple redémarrage de l'application ou du service peut résoudre temporairement une fuite de mémoire en libérant la mémoire accumulée.
bash # Exemple : Redémarrage du serveur web Apache sudo systemctl restart apache2 - Vérifier la surveillance spécifique à l'application: De nombreuses applications (par exemple, serveurs web, bases de données) disposent de leurs propres outils de surveillance ou de journaux qui peuvent aider à diagnostiquer les problèmes de mémoire.
- Analyser les vidages principaux (core dumps): Pour les applications critiques, vous pourriez devoir activer les vidages principaux et utiliser des outils de débogage (comme
gdb) pour analyser l'état de la mémoire lorsque la fuite se produit. Il s'agit d'une étape de dépannage avancée. - Augmenter l'espace d'échange (Mesure temporaire): Si vous ne pouvez pas résoudre immédiatement la fuite, vous pouvez augmenter l'espace d'échange pour fournir plus de mémoire virtuelle. Cependant, c'est une solution de contournement, pas une solution permanente.
- Mise à niveau matérielle: Si votre système manque constamment de mémoire pour sa charge de travail, vous devrez peut-être ajouter plus de RAM physique.
Gestion des partitions disque pleines
Lorsqu'une partition disque se remplit, cela peut provoquer diverses défaillances du système. Une action immédiate est généralement requise.
- Identifier la partition pleine: Utilisez
df -hpour localiser la ou les partitions à 100 % de capacité. - Trouver les fichiers/répertoires volumineux: Utilisez
du -shoudu -h --max-depth=1 <répertoire>pour naviguer dans l'arborescence des répertoires et trouver ce qui consomme l'espace.
bash # Trouver les répertoires les plus volumineux dans la partition racine sudo du -h --max-depth=1 / | sort -rh
Les coupables courants incluent les fichiers journaux (/var/log), les fichiers temporaires (/tmp), les caches de paquets et les données utilisateur. - Nettoyer les fichiers journaux: Les fichiers journaux peuvent devenir très volumineux. Vous pouvez souvent supprimer en toute sécurité les anciens journaux, ou configurer la rotation des journaux (
logrotate) pour gérer leur taille automatiquement.- Suppression des anciens journaux: Soyez prudent et assurez-vous de ne pas supprimer les journaux actuellement actifs. Vous pouvez utiliser
findpour supprimer les fichiers plus anciens qu'un certain nombre de jours.
bash # Supprimer les fichiers .log plus anciens que 30 jours dans /var/log/myapp sudo find /var/log/myapp -name "*.log" -type f -mtime +30 -delete - Rotation des journaux: Assurez-vous que
logrotateest correctement configuré pour vos services. Il s'exécute généralement quotidiennement et gère l'archivage et la suppression des anciens journaux.
- Suppression des anciens journaux: Soyez prudent et assurez-vous de ne pas supprimer les journaux actuellement actifs. Vous pouvez utiliser
- Vider le cache du gestionnaire de paquets: Les gestionnaires de paquets conservent souvent les fichiers de paquets téléchargés. Les effacer peut libérer un espace disque considérable.
- Debian/Ubuntu (apt):
bash sudo apt autoremove sudo apt clean - CentOS/RHEL/Fedora (yum/dnf):
bash sudo yum autoremove # ou dnf autoremove sudo yum clean all # ou dnf clean all
- Debian/Ubuntu (apt):
- Supprimer les paquets inutilisés: Désinstallez les logiciels dont vous n'avez plus besoin.
- Debian/Ubuntu:
sudo apt remove <nom_du_paquet> - CentOS/RHEL/Fedora:
sudo yum remove <nom_du_paquet>ousudo dnf remove <nom_du_paquet>
- Debian/Ubuntu:
- Vérifier les répertoires temporaires: Les fichiers dans
/tmpsont souvent sans danger à supprimer, surtout après un redémarrage, mais soyez prudent si des applications les utilisent activement. - Vider la corbeille: Si vous utilisez un environnement de bureau, vérifiez les corbeilles des utilisateurs.
- Envisager le redimensionnement des partitions: Si l'espace est constamment un problème et que le nettoyage n'est pas suffisant, vous devrez peut-être redimensionner les partitions ou ajouter plus de stockage. Il s'agit d'une opération plus avancée qui pourrait nécessiter le démontage des partitions ou le démarrage à partir d'un environnement live.
Bonnes pratiques pour la prévention
- Surveillance régulière: Mettez en place une surveillance régulière du CPU, de la mémoire et de l'espace disque à l'aide d'outils comme
top,htop,free,dfet de solutions de surveillance dédiées (par exemple, Nagios, Zabbix, Prometheus). - Automatiser la rotation des journaux: Assurez-vous que
logrotateest correctement configuré pour tous les services générant des journaux. - Ajuster les configurations des applications: Optimisez les paramètres des applications pour une meilleure efficacité des ressources. Par exemple, ajustez les processus de travail du serveur web, les pools de connexion de base de données, etc.
- Configurer des alertes: Configurez des alertes lorsque l'utilisation des ressources dépasse les seuils prédéfinis.
- Mises à jour du système: Maintenez votre système et vos applications à jour, car des améliorations de performance et des corrections de bogues sont souvent incluses dans les nouvelles versions.
- Limites de ressources: Pour les systèmes multi-utilisateurs ou les environnements conteneurisés, envisagez de définir des limites de ressources (par exemple, à l'aide de
ulimitou cgroups) pour empêcher un seul processus d'affamer les autres.
Conclusion
Le dépannage de l'épuisement des ressources sous Linux est une compétence fondamentale pour maintenir la stabilité et les performances du système. En maîtrisant des outils tels que top, htop, free, df et du, vous pouvez diagnostiquer efficacement les problèmes de CPU, de mémoire et d'espace disque. N'oubliez pas d'enquêter sur la cause profonde, d'utiliser les signaux kill avec discernement et de mettre en œuvre des mesures préventives telles que la surveillance régulière et la gestion automatisée des journaux. Une approche proactive vous évitera de nombreux maux de tête potentiels pour votre système.