Déboguer et analyser les erreurs système avec dmesg

En administration système sous Linux, lorsqu’un serveur se met à dysfonctionner de façon inexpliquée, l’un des premiers réflexes consiste à interroger le tampon circulaire du noyau (le ring buffer). C’est précisément le rôle de la commande dmesg (display message). Cet outil capture tous les messages émis par le kernel depuis la séquence initiale de boot, offrant une visibilité directe sur la détection du matériel, l’allocation des ressources et les erreurs critiques.

Pourquoi et quand utiliser dmesg ?

Le noyau consigne des alertes majeures qui n’atterrissent pas toujours immédiatement dans les journaux applicatifs habituels. Consulter les sorties du noyau s’avère particulièrement utile dans plusieurs contextes :

  • Saturation de la mémoire et Swap : Lorsqu’un serveur manque cruellement de RAM et d’espace de pagination, le mécanisme de protection OOM Killer (Out-Of-Memory Killer) intervient brutalement pour tuer les processus les plus gourmands. L’événement est explicitement tracé dans dmesg.
  • Défaillances de stockage : Des secteurs défectueux sur un disque dur, des erreurs d’E/S (I/O error) ou des passages impromptus d’un système de fichiers en lecture seule apparaissent d’abord à ce niveau. Dans ce cas, il est souvent judicieux de vérifier l’état du stockage et d’afficher la taille de partition linux / Solaris pour écarter toute saturation de volume comme /tmp ou /var.
  • Détection de nouveaux périphériques : Branchement d’une interface réseau, d’un contrôleur RAID ou d’un périphérique USB.
  • Validation après recompilation : Si vous venez de compiler un noyau Linux personnalisé, analyser la sortie de dmesg au premier redémarrage est indispensable pour valider le bon chargement des modules et pilotes.

Les options indispensables en ligne de commande

Par défaut, exécuter simplement dmesg génère un flux massif difficilement lisible. Quelques arguments clés permettent de cibler les informations pertinentes :

  • Horodatage lisible (-T) : Par défaut, dmesg affiche des secondes écoulées depuis le démarrage. L’option dmesg -T convertit ces données en dates et heures humaines claires.
  • Filtrage par niveau de criticité (-l) : Pour isoler les problèmes urgents sans être pollué par les messages informatifs, vous pouvez filtrer par sévérité :
    dmesg -l err,crit,alert,emerg
  • Suivi en temps réel (-w) : Semblable à un tail -f, le commutateur -w laisse la sortie ouverte pour capturer en direct les événements du noyau (utile lors de tests matériels ou d’enfichage à chaud).
  • Purger le tampon (-c) : Cette commande affiche les messages puis vide la mémoire tampon. À manipuler avec précaution sur des serveurs en production, car cela supprime l’historique immédiat pour les autres diagnostics.

En combinant ces options avec des outils standards comme grep, vous identifierez en quelques secondes les causes réelles d’un service qui refuse de démarrer ou d’un incident système bloquant.