print · rss · source

Note : ce tutoriel est tiré d'un article sur les bases de l'administration système qui est téléchargeable ici : admin_unix.pdf.

Consommation CPU d'un système Linux : utiliser vmstat et uptime

Un système Unix est multi-tâches, cela signifie que plusieurs programmes peuvent s'exécuter en même temps sur la même machine. Cela peut sembler idyllique, mais la réalité est malheureusement parfois beaucoup moins rieuse !

En fait, les processus ne s'exécutent pas vraiment en même temps. Le noyau s'arrange pour partager le temps CPU entre les différents processus mais à un instant donné, seul l'un d'eux s'exécute pendant un tout petit laps de temps. Passé cet intervalle, le noyau va interrompre le processus en cours pour en exécuter un autre, et ainsi de suite. Cela signifie que sur une machine très chargée (avec beaucoup de processus), un processus va mettre plus de temps à s'exécuter car il devra attendre plus longtemps que le noyau lui donne la main.

Qu'est-ce qu'un processus ?

Un processus est tout simplement un programme en train de s'exécuter. Un démon est un type un peu particulier de processus qui tourne en arrière plan, hors du contrôle direct d'un utilisateur et qui ne peut donc être arrêté par la commande ^C (controle-C). En général un démon est lancé au démarrage de la machine et il sert des requètes réseau (mais pas seulement), comme par exemple le démon apache qui répond aux requètes HTTP pour fournir des pages web.

La commande vmstat

La commande vmstat, déjà vue pour analyser la consommation mémoire, permet de suivre en temps réel l'utilisation de la CPU :

$ vmstat 1
procs ----------memory---------- --swap-- ----io---- --system-- -----cpu----
 r  b swpd   free   buff   cache  si   so   bi    bo   in   cs  us sy id wa st
 0  1   68 159976 217660 3380524   0    0   27    27    1    0   2  1 86 10  0
 0  1   68 161216 217660 3380612   0    0    0  4000 2266 1091   4  1 71 24  0
 0  1   68 161092 217660 3380612   0    0    0  3164 2346 1350   3  1 71 25  0
 0  1   68 160596 217672 3380856   0    0    8  1976 1698 2175   5  2 69 23  0
 0  1   68 160844 217676 3380852   0    0    0  1412 1572 1865   4  1 74 20  0
 0  0   68 164192 217680 3380840   0    0    0   840 1383 1440   4  1 84 11  0

La colonne r indique le nombre de processus en attente d'exécution. Cette appellation un peu trompeuse désigne les processus prèts à s'exécuter mais aussi ceux qui sont en cours d'exécution (qui utilisent le processeur). Si le nombre de processus en attente d'exécution est constamment supérieur au nombre de processeurs de la machine, cela signifie que le système est chargé. Est-ce que c'est critique ? Pas forcément ! Cela signifie juste que les processus doivent attendre leur tour pour s'exécuter. Savoir si cette charge est critique ou non va dépendre essentiellement de paramètres externes, tels que la qualité de service ou les délais de réponse souhaités.

Un deuxième indicateur de charge est fourni par la colonne us. Elle indique, en pourcentage, le temps passé par le système à exécuter des programmes applicatifs.

La colonne sy indique, en pourcentage, le temps passé par le système à exécuter des routines du noyau. Normalement, ces routines sont très rapides. Une valeur élevée peut donc être le signe d'un problème et demande des investigations supplémentaires. En général, cette valeur est plus faible que celle indiquée par la colonne us.

L'utilisation du processeur correspond donc à la somme des colonnes us et sy. Si cette valeur est constamment proche de 100, cela signifie que le processeur est très utilisé. Si en plus il y a de nombreux processus en attente, alors peut-être faudra-t-il revoir la politique de répartition de charge ? Mais là encore, c'est très relatif.

La colonne id indique la proportion de temps durant lequel le CPU est inutilisé. Si il y a un seul indicateur de charge à retenir, c'est peut-être celui-ci !

Notez que les trois indicateurs précédents (us, sy et id) sont établis à partir d'une moyenne de l'ensemble des processeurs. Par exemple, sur une machine quadri-processeurs, si l'un de processeur est utilisé à 100%, le pourcentage d'utilisation indiqué par vmstat sera de 25%. Pour connaître exactement la consommation par processeur, il faut utiliser la commande mpstat.

Les colonnes in et cs portent sur l'activité du noyau. Ces valeur sont difficilement exploitables, on les ignore !

La commande uptime

La commande uptime indique la charge moyenne sur respectivement 1, 5 et 15 minutes. Par charge moyenne, on entend le nombre moyen de processus en attente d'exécution ou en sommeil :

$ uptime
10:11:56 up 20 days, 22:20, 1 user, load average: 0.67, 0.58, 0.46

Dans l'exemple ci-dessus, cette charge est de respectivement 0.67, 0.58 et 0.46. La signification de ces indicateurs n'est pas directement exploitable, même en connaissant le nombre de processeurs. Est-ce pour autant qu'ils sont inutiles ? Non, ils sont en fait très utiles quand ils sont intégrés à un outil de supervision qui va les grapher en temps réel et enregistrer leur historique. Les variations de charge constitueront alors des indicateurs précieux de l'activité de la machine.

print · rss · source
Page last modified on January 11, 2011, at 10:37 AM