Guillaume Fenollar DevOps et SysAdmin Freelance

Guillaume FENOLLAR

Administrateur Linux | DevOps Indépendant

− Nouméa −

Lire, comprendre, et analyser la commande top

La commande top est une des premières commandes que l’on apprend dès qu’on s’intéresse à la façon dont son système fonctionne. Quand on vient de Windows et qu’on cherche l’équivalent du gestionnaire de tâches, c’est top qui vient toujours en réponse car lors de l’apparition d’un problème, il permet d’aiguiller vers sa source dans 90% des cas.

Informations d’Entête : État général de la machine

top command

L’entête permet d’avoir une vue globale de l’état de santé de la machine physique ou virtuelle. Tout est ici disponible pour avoir une vision nette de comment se porte le système, à tous les niveaux. C’est souvent le point de départ de tout debug.

Voici une brève explication de chaque élément qui nous intéresse ici :

  1. Uptime : À gauche l’heure de la machine, puis le réel “uptime”, temps réel d’activité de la machine. Il est de tradition pour un administrateur linux de vouloir atteindre la plus haute valeur, l’année devenant souvent l’unité de base ;-)
  2. Load Average: Charge moyenne du CPU. Les trois nombres représentent respectivement la charge processeur de la dernière minute, des 5 dernières minutes et du quart d’heure. Une valeur de 1 indique que la somme des processus utilisant du cpu atteignent 100% d’utilisation d’un CPU. Ainsi, pour un quad-core, le seuil “inquiétant” est de 4, où, comme lors d’un embouteillage, les processus demandent plus de puissance qu’il y en a de disponible. À noter que dans certains cas de blocage hardware (disque notamment), cette valeur peut être très haute sans grosse activité cpu.
  3. Activité CPU : L’activité en détail des CPUs. Voici les éléments les plus importants:
    • us: Charge processeur demandée par des processus utilisateurs (sans compter les nice), tout ce qui tourne dans l’userland.
    • sy: Tout temps CPU passé par les instructions bas niveau, niveau kernel.
    • ni: Charge demandée par des processus utilisateurs “nicés” (voir cet article).
    • id: Pourcentage de ressources processeur libres (tâches inactives)
    • wa: Charge de processus dédiés à une tâche système ou utilisateur, mais actuellement en attente de ressource I/O, j’entends par là réseau ou disque.
  4. Activité Mémoire: Il s’agit d’un équivalent de ce que renvoie la commande free, c’est à dire le contenu de /proc/meminfo. Il s’agit là de la mémoire vive totale, utilisée (y compris en cache et en buffer), et la libre. Un article ultérieur viendra démystifier ces valeurs qui font peur à nombre de nouveaux.

Informations des processus : Gestion des tâches

En dessous des informations d’entête se trouvent les informations disponibles pour chaque processus.

Voyons ça de plus près : top command Trève de blabla, venons en aux faits:

  1. PID: Identifiant du processus. Il vous sera demandé pour la plupart des opérations en mode interactif (voir partie suivante).
  2. Nice: Valeur de nice. Il s’agit de la priorité d’un processus sur le temps processeur (CPU Time). Voir cet article pour plus de détails.
  3. Ressources: Ici, la colonne RES est la plus importante et définit la mémoire résidente utilisée par l’application. Elle est l’équivalente de %MEM. VIRT et SHR définissent l’espace mémoire partagé disponible à l’usage de l’application. Cela inclut les librairies partagées entre plusieurs programmes (exemple: libc) et donc ne représentent absolument pas la mémoire réelle utilisée par l’application.
  4. Charge CPU/MEM: Partage de la durée d’utilisation (voir Temps processeur) utilisé par le processus pour le CPU et pour la mémoire vive. Par défaut, top fait un tri sur la colonne %CPU, ce qui permet de voir facilement les processus trop gourmants.
  5. Temps processeur: En anglais CPU Time, il affiche le temps processeur utilisé par le processus correspondant. Il s’agit du temps (en minutes:secondes) passé par les processeurs sur cette tâche. Il est normal que cette valeur paraisse plutôt basse, même pour un processus qui tourne depuis plusieurs jours ou semaines étant donné que la plupart des opérations pour une tâche sont très rapides, et que le processeur passe du coup pas mal de temps à attendre le I/O.
  6. Commande: Le nom du programme correspondant. Appuyez sur ‘c’ pour passer en mode “commande” ou la ligne de commande utilisée est affichée à la place du nom de programme.

Raccourcis utiles en mode interactif

Le mode interactif est le mode par défaut de top. Celui où vous entrez normalement, et qui se rafraîchit par défaut toutes les 3 secondes. Voici quelques raccourcis à utiliser dans cette fenêtre:

c → Afficher la commande complète en exécution et non pas juste le nom du binaire, comme par défaut.
     ou 
d ou s → Changer le délai de rafraîchissement. Toute valeur marche (je vous vois déjà en train de tenter la valeur 0.001).
k → Envoyer un signal à une tâche, le plus souvent pour la tuer.
r → Renicer le processus.
V → Afficher en mode arborescence. Idéal pour voir les parents des processus qui posent problème.
1 → Afficher l’activité CPU en imprimant une ligne par CPU.
u → Faire une recherche sur un utilisateur en particulier.
i → Ne pas afficher les tâches inactives (idle). Très utile pour y voir plus clair.
L → Rechercher une chaîne de caractère dans les tâches. ‘&’ pour remonter l’occurrence suivante.

Variantes

Top a fait beaucoup de bébés, certains étant assez inutiles, alors que certains sont devenus autant indispensables que la commande mère qui les a inspirés. Par exemple, htop est une version plus jolie et soit disant plus compréhensible que top. Personnellement, je préfère utiliser la commande top car installée absolument partout par défaut.

htop → Un top coloré avec une représentation graphique des ressources utilisées.
ctop → Monitor les conteneurs Docker et fournit une interface bien plus lisible que la commande `docker stats`
iotop → Un top consacré aux entrées/sorties (I/O). Très utile si vous avez une valeur de waiting élevée!
iftop → Monitor consacré aux interfaces réseaux.
mytop → Consacré à MyTop, il permet de voir les requête et les analyser.
pg_top → L’équivalent, consacré aux bases PostgreSQL.
sntop → Petit outil de monitoring permettant de pinger les hôtes voulus (via fichier de conf) pour s’assurer qu’ils répondent. Un nagios du pauvre quoi.
vtop → Il s’agit en fait du top original, mais dont les processus ne sont pas limités au contexte actuel. Cela veut dire qu’il affiche aussi les processes des machines virtuelles. Idéal donc quand une machine physique est sous l’eau, pour déterminer d’où vient le problème! (voir aussi vps)