Pour ceux qui l'ignorent, une charge excessive a souvent comme raison des processus en attente de ressource. Un "top" indique un %cpu faible, mais un %wait qui peut dépasser les 40%, et c'est rarement bon ...

Exemple de check avec mpstat :

mpstat 1

Linux 5.8.0-28-generic (teknomage) 	13/12/2020 	_x86_64_	(4 CPU)

00:10:16     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
00:10:17     all    5,68    0,00    1,08    0,54    0,00    2,70    0,00    0,00    0,00   90,00
00:10:18     all    5,43    0,00    2,45    0,27    0,00    2,17    0,00    0,00    0,00   89,67
00:10:19     all    6,49    0,00    3,24    0,00    0,00    1,89    0,00    0,00    0,00   88,38
00:10:20     all    6,20    0,00    1,89    0,00    0,00    2,96    0,00    0,00    0,00   88,95
00:10:21     all    6,09    0,00    1,94    1,94    0,00    1,39    0,00    0,00    0,00   88,64
00:10:22     all   10,78    0,00    4,58    0,00    0,00    2,70    0,00    0,00    0,00   81,94

On voir bien ici les valeurs qui nous intéressent, pour commencer à identifier le noeud dans le système :

  • usr : temps passé dans du code utilisateur
  • sys ; temps passé dans les appel systèmes
  • iowait : temps passé à attendre du event hardware (disque dur, réseau, ...)
  • idle : temps passé à ne rien faire, si c'est haut, votre pc ne travaille pas :)

Si la majeure partie du cpu est consommée par usr+sys, alors votre système souffre d'une surcharge cpu.

Si la majeure partie du cpu est consommée par du iowait, alors votre système attends des ressources lentes, et dans ce cas ...

avec PS

la commande PS nous indique des flags pour chaque processus courant. le flag D indique que le process est en attente d'une ressource.

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"

avec iostat, si l'attente est purement de type "block"

nous pouvons voir ainsi si nous avons un disque dur qui est très sollicité et devient donc un bottleneck (vitesse cpu > vitesse dd)

iostat -x 1 3

Tracer les block dump

nous pouvons voir aussi quels process font des opération de manipulation de block

echo 1 > /proc/sys/vm/block_dump
tail -f /var/log/syslog

ne pas oublier de repasser à 0 une fois le debugging fait, car c'est couteux en espace disque ;)

echo 0 > /proc/sys/vm/block_dump