Nous rencontrons un comportement étrange où nous constatons une haute utilisation du CPU mais un load average assez faible.
Le comportement est mieux illustré par les graphiques suivants de notre système de surveillance.
À environ 11h57, l'utilisation du CPU passe de 25% à 75%. Le load average n'a pas changé de manière significative.
Nous utilisons des serveurs avec 12 coeurs avec 2 hyper-threads chacun. Le système d'exploitation voit cela comme 24 CPUs.
Les données d'utilisation du CPU sont collectées en exécutant /usr/bin/mpstat 60 1
chaque minute. Les données pour la ligne all
et la colonne %usr
sont affichées dans le graphique ci-dessus. Je suis certain que cela montre la moyenne par CPU, pas l'utilisation "empilée". Alors que nous voyons une utilisation de 75% dans le graphique, nous voyons un processus montrant utiliser environ 2000% de CPU "empilé" dans top
.
La figure du load average est prise à partir de /proc/loadavg
chaque minute.
uname -a
donne :
Linux ab04 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
La distribution Linux est Red Hat Enterprise Linux Server release 6.3 (Santiago)
Nous exécutons quelques applications web Java sous une charge assez lourde sur les machines, environ 100 requêtes/s par machine.
Si j'interprète correctement les données d'utilisation du CPU, lorsque nous avons une utilisation du CPU de 75%, cela signifie que nos CPUs exécutent un processus 75% du temps, en moyenne. Cependant, si nos CPUs sont occupés 75% du temps, ne devrions-nous pas voir un load average plus élevé? Comment les CPUs pourraient-ils être occupés à 75% alors que nous n'avons que 2-4 tâches en file d'attente d'exécution?
Interprétons-nous correctement nos données? Qu'est-ce qui peut causer ce comportement?