Dépannage de l'épuisement des ressources Linux : CPU, mémoire et espace disque

Apprenez à identifier et à résoudre les goulots d'étranglement de performance Linux causés par une utilisation excessive du CPU, des fuites de mémoire ou des partitions de disque pleines. Ce guide fournit des outils essentiels en ligne de commande comme `top`, `htop`, `free`, `df` et `du`, ainsi que des stratégies pratiques et des bonnes pratiques pour diagnostiquer les problèmes et libérer les ressources système critiques, garantissant des performances et une stabilité optimales.

32 vues

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
    Dans top, appuyez sur 1 pour voir l'utilisation de chaque cœur de CPU. Appuyez sur P pour trier par utilisation du CPU. Recherchez les processus consommant constamment un pourcentage élevé du CPU.

  • htop: Une version améliorée et interactive de top. Il est souvent préféré pour sa convivialité, son affichage coloré et sa navigation plus facile.
    bash htop
    Similaire à top, htop permet de trier par utilisation du CPU et fournit des informations détaillées sur les processus.

  • mpstat: Faisant partie du paquet sysstat, mpstat fournit 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 -h rend la sortie lisible par l'homme (par exemple, Mo, Go).
    bash free -h
    Portez attention à la mémoire available (disponible) et à l'espace d'échange used (utilisé). Une utilisation élevée de l'échange indique une RAM insuffisante.

  • top / htop: top et htop affichent 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 colonnes si (swap-in) et so (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 -h rend 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 -s résume, et -h le 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

  1. Identifier le processus: Utilisez top ou htop pour trouver l'ID de processus (PID) consommant beaucoup de CPU.
  2. 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.
  3. Terminer le processus (À utiliser avec prudence !): Vous pouvez utiliser la commande kill pour 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.

  1. Identifier le processus: Utilisez top ou htop pour 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.
  2. 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é ?
  3. 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
  4. 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.
  5. 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.
  6. 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.
  7. 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.

  1. Identifier la partition pleine: Utilisez df -h pour localiser la ou les partitions à 100 % de capacité.
  2. Trouver les fichiers/répertoires volumineux: Utilisez du -sh ou du -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.
  3. 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 find pour 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 logrotate est correctement configuré pour vos services. Il s'exécute généralement quotidiennement et gère l'archivage et la suppression des anciens journaux.
  4. 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
  5. 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> ou sudo dnf remove <nom_du_paquet>
  6. Vérifier les répertoires temporaires: Les fichiers dans /tmp sont souvent sans danger à supprimer, surtout après un redémarrage, mais soyez prudent si des applications les utilisent activement.
  7. Vider la corbeille: Si vous utilisez un environnement de bureau, vérifiez les corbeilles des utilisateurs.
  8. 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, df et de solutions de surveillance dédiées (par exemple, Nagios, Zabbix, Prometheus).
  • Automatiser la rotation des journaux: Assurez-vous que logrotate est 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 ulimit ou 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.