Collecter des métriques de performances pour une machine virtuelle Linux
S’applique à : ✔️ Machines virtuelles Linux
Cet article explique comment récupérer des métriques de performances à partir d’une machine virtuelle Linux dans Microsoft Azure à l’aide des utilitaires Sysstat (outils de supervision des performances). Il fournit des exemples d’utilisation de ces utilitaires et de lecture de leurs sorties.
Plusieurs commandes sont disponibles pour collecter des compteurs de performances sur Linux. Les commandes comme vmstat
et uptime
fournissent des métriques système essentielles telles que l’utilisation du processeur, la mémoire système et la charge système. La plupart de ces commandes sont préinstallées par défaut, tandis que d’autres sont facilement accessibles à partir des référentiels par défaut.
En fonction du type des métriques, ces commandes peuvent être classées dans :
- PROCESSEUR : mpstat, vmstat
- Mémoire : libre, permutation
- E/S disque : iostat, lsblk
- Processus : pidstat, ps
Installer des utilitaires Sysstat pour Linux
Vous pouvez installer les utilitaires Sysstat sur une machine virtuelle Linux à l’aide d’une commande Bash ou de la fonctionnalité Exécuter la commande via Azure CLI. Si vous utilisez les commandes Azure CLI fournies dans cet article, vérifiez que les deux variables d’environnement suivantes sont définies. Vous devez remplacer le nom du groupe de ressources et le nom de la machine virtuelle par les valeurs réelles.
export MY_RESOURCE_GROUP_NAME="yourResourceGroup"
export MY_VM_NAME="yourVM"
Note
Certaines des commandes suivantes nécessitent des privilèges racine.
Pour installer le sysstat
package sur une machine virtuelle Linux, utilisez la commande suivante :
Ubuntu :
Red Hat :
SUSE :
UC
mpstat
La mpstat
commande fait partie du sysstat
package. Il affiche l’utilisation du processeur et la moyenne de chaque UC, ce qui est utile pour identifier l’utilisation du processeur. La mpstat
commande fournit une vue d’ensemble de l’utilisation du processeur disponible, ce qui permet d’identifier l’équilibre d’utilisation et si un seul processeur est surchargé.
Voici un exemple d’exécution mpstat
:
-P
: indique le processeur à afficher les statistiques, et l’argumentALL
indique que les statistiques de tous les processeurs en ligne du système doivent être affichées.1
: le premier argument numérique spécifie l’intervalle (en secondes) auquelmpstat
doit actualiser et afficher de nouvelles statistiques.2
: le deuxième argument numérique spécifie le nombre de foismpstat
où les statistiques doivent être affichées. Dans ce cas, il imprime deux statistiques à un intervalle d’une seconde.
Vous pouvez augmenter le nombre de fois d’arguments pour prendre en charge des temps de collecte de données plus longs. En règle générale, trois ou cinq secondes sont suffisantes. Pour les systèmes dont le nombre de cœurs est plus élevé, la réduction de la taille des données peut vous aider à gérer le volume de données affichées.
Comment lire la sortie mpstat
Voici un exemple de sortie de mpstat
:
Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9) 02/21/24 _x86_64_ (8 CPU)
16:55:50 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
16:55:51 all 69.09 0.00 30.16 0.00 0.38 0.38 0.00 0.00 0.00 0.00
16:55:51 0 77.23 0.00 21.78 0.00 0.99 0.00 0.00 0.00 0.00 0.00
16:55:51 1 97.03 0.00 0.99 0.00 0.99 0.99 0.00 0.00 0.00 0.00
16:55:51 2 11.11 0.00 88.89 0.00 0.00 0.00 0.00 0.00 0.00 0.00
16:55:51 3 11.00 0.00 88.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00
16:55:51 4 83.84 0.00 16.16 0.00 0.00 0.00 0.00 0.00 0.00 0.00
16:55:51 5 76.00 0.00 23.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00
16:55:51 6 96.00 0.00 3.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00
16:55:51 7 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
[...]
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 74.02 0.00 25.52 0.00 0.25 0.21 0.00 0.00 0.00 0.00
Average: 0 63.00 0.00 36.67 0.00 0.33 0.00 0.00 0.00 0.00 0.00
Average: 1 97.33 0.00 1.67 0.00 0.33 0.67 0.00 0.00 0.00 0.00
Average: 2 42.33 0.00 57.33 0.00 0.33 0.00 0.00 0.00 0.00 0.00
Average: 3 34.33 0.00 65.00 0.00 0.33 0.33 0.00 0.00 0.00 0.00
Average: 4 88.63 0.00 11.04 0.00 0.00 0.33 0.00 0.00 0.00 0.00
Average: 5 71.33 0.00 28.33 0.00 0.33 0.00 0.00 0.00 0.00 0.00
Average: 6 95.65 0.00 4.01 0.00 0.00 0.33 0.00 0.00 0.00 0.00
Average: 7 99.67 0.00 0.00 0.00 0.33 0.00 0.00 0.00 0.00 0.00
Il y a plusieurs points importants à noter. La première ligne fournit des informations utiles :
- Noyau et mise en production :
5.14.0-362.8.1.el9_3.x86_64
- Nom d’hôte :
alma9
- Date:
02/21/24
- Architecture:
_x86_64_
- Nombre total d’UC (ces informations sont utiles pour interpréter la sortie d’autres commandes) :
(8 CPU)
Ensuite, les métriques des PROCESSEURs sont affichées. Voici une explication de chaque colonne :
Time
: horodatage indiquant quand l’échantillon a été collecté.CPU
: identificateur numérique de l’UC. L’identificateurall
représente une moyenne pour tous les processeurs.%usr
: pourcentage d’utilisation du processeur par processus d’espace utilisateur, généralement des applications utilisateur.%nice
: pourcentage d’utilisation du processeur par les processus d’espace utilisateur avec une valeur (priorité) intéressante.%sys
: pourcentage d’utilisation du processeur par processus d’espace noyau.%iowait
: pourcentage de temps d’inactivité du processeur en attente d’opérations d’E/S en attente.%irq
: pourcentage de temps processeur consacré à la maintenance des interruptions matérielles.%soft
: pourcentage de temps processeur consacré à la maintenance des interruptions logicielles.%steal
: pourcentage de temps processeur passé par une machine virtuelle à traiter d’autres machines virtuelles (non applicables à Azure en raison d’un manque de surprovisionnement du processeur).%guest
: pourcentage de temps processeur passé par un processeur virtuel à servir des machines virtuelles (non applicables à Azure ; pertinentes uniquement pour les systèmes nus exécutant des machines virtuelles).%gnice
: pourcentage de temps processeur d’un processeur virtuel avec une bonne valeur consacrée à servir les machines virtuelles (non applicables à Azure ; uniquement pertinentes pour les systèmes nus exécutant des machines virtuelles).%idle
: pourcentage de temps processeur inactif et non en attente de requêtes d’E/S.
Considérations importantes
Considérations clés lors de l’examen de la sortie de mpstat
:
- Vérifiez que tous les processeurs sont correctement chargés et qu’aucun processeur unique ne sert toute la charge. Ces informations peuvent indiquer une application à thread unique.
- Recherchez un équilibre sain entre
%usr
et%sys
, comme le contraire indiquerait plus de temps passé sur la charge de travail réelle que le service des processus de noyau. %iowait
Recherchez des pourcentages, car les valeurs élevées peuvent indiquer un système qui attend constamment les demandes d’E/S.- Une utilisation élevée
%soft
peut indiquer un trafic réseau élevé.
vmstat
L’utilitaire vmstat
est largement disponible dans la plupart des distributions Linux. Il fournit une vue d’ensemble générale de l’utilisation de l’UC, de la mémoire et des E/S de disque dans un seul volet.
Voici un exemple d’exécution vmstat
:
-w
: utilisez l’impression large pour conserver des colonnes cohérentes.1
: le premier argument numérique spécifie l’intervalle en secondes entre chaque rapport. Dans ce cas, vmstat génère un rapport toutes les unes des secondes.5
: le deuxième argument numérique spécifie le nombre de rapports que vmstat doit générer. Avec5
spécifié ici, vmstat génère un total de cinq rapports.
Comment lire la sortie vmstat
Voici un exemple de sortie de vmstat
:
--procs-- -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa st
14 0 0 26059408 164 137468 0 0 89 3228 56 122 3 1 95 1 0
14 1 0 24388660 164 145468 0 0 0 7811 3264 13870 76 24 0 0 0
18 1 0 23060116 164 155272 0 0 44 8075 3704 15129 78 22 0 0 0
18 1 0 21078640 164 165108 0 0 295 8837 3742 15529 73 27 0 0 0
15 2 0 19015276 164 175960 0 0 9 8561 3639 15177 73 27 0 0 0
La sortie est classée dans les six groupes suivants. La sortie affiche des statistiques globales pour l’ensemble du système (c’est-à-dire, tous les processeurs et tous les appareils bloqués agrégés).
procs
: Statistiques pour les processus.memory
: Statistiques pour la mémoire système.swap
: Statistiques pour l’échange.io
: Statistiques pour les E/S de disque.system
: Statistiques pour les commutateurs de contexte et les interruptions.cpu
: Statistiques relatives à l’utilisation du processeur.
procs
La section procs comporte deux colonnes :
r
: nombre de processus exécutables dans la file d’attente d’exécution.b
: nombre de processus bloqués en attente d’E/S.
Cette section indique immédiatement s’il existe un goulot d’étranglement dans le système. Les nombres élevés sur l’une ou l’autre colonne indiquent des processus de mise en file d’attente et d’attente des ressources.
La r
colonne indique le nombre de processus qui attendent l’exécution du temps processeur. Un moyen simple d’interpréter ce nombre est le suivant : si le nombre de processus dans la r
file d’attente est supérieur au nombre total de processeurs, il peut être déduit que le processeur du système est trop chargé pour allouer du temps processeur pour tous les processus en attente d’exécution.
La b
colonne indique le nombre de processus en attente d’exécution et bloqués par les demandes d’E/S. Un nombre élevé dans cette colonne indique un système qui rencontre des E/S élevées, et les processus ne peuvent pas s’exécuter en raison d’autres processus qui attendent que les demandes d’E/S se terminent. Cela peut également indiquer une latence élevée du disque.
memory
La section mémoire comporte quatre colonnes. Les valeurs sont affichées en octets. Cette section fournit une vue d’ensemble générale de l’utilisation de la mémoire.
swpd
: quantité de mémoire d’échange utilisée.free
: quantité de mémoire libre.buff
: quantité de mémoire utilisée pour les mémoires tampons.cache
: quantité de mémoire utilisée pour le cache.
swap
La section d’échange comporte deux colonnes :
si
: quantité de mémoire permutée (déplacée de la mémoire système à l’échange) par seconde.so
: quantité de mémoire permutée (déplacée de l’échange vers la mémoire système) par seconde.
Si une valeur élevée si
est observée, elle peut représenter un système qui manque de mémoire système et déplace les pages pour échanger (permutation).
Io
La section Io comporte deux colonnes. Ces valeurs sont en blocs par seconde.
bi
: nombre de blocs reçus d’un appareil de bloc (blocs de lecture par seconde) par seconde.bo
: nombre de blocs envoyés à un appareil de bloc (écritures par seconde) par seconde.
d’arroseur à pré-action
La section système comporte deux colonnes :
in
: nombre d’interruptions par seconde.cs
: nombre de commutateurs de contexte par seconde.
Un nombre élevé d’interruptions par seconde peut indiquer un système occupé avec des périphériques matériels (par exemple, des opérations réseau).
Un grand nombre de commutateurs de contexte peut indiquer un système occupé avec de nombreux processus de courte durée. Il n’y a pas de bon ou mauvais nombre ici.
cpu
La cpu
section comporte cinq colonnes :
us
: pourcentage d’utilisation de l’espace utilisateur.sy
: pourcentage d’utilisation du système (espace noyau).id
: pourcentage d’utilisation du temps d’inactivité du processeur.wa
: pourcentage d’utilisation du temps d’inactivité du processeur en attente de processus avec E/S.st
: pourcentage d’utilisation du temps processeur passé à servir d’autres processeurs virtuels (non applicables à Azure).
Les valeurs sont présentées en pourcentages. Ces valeurs sont identiques à celles présentées par l’utilitaire mpstat
et servent à fournir une vue d’ensemble générale de l’utilisation du processeur. Suivez un processus similaire à mpstat lors de l’examen de ces valeurs.
Disponibilité
L’utilitaire uptime
fournit une vue d’ensemble générale de la charge système avec les valeurs moyennes de charge.
Comment lire la sortie de temps d’activité
Voici un exemple de sortie de uptime
:
16:55:53 up 9 min, 2 users, load average: 9.26, 2.91, 1.18
Affiche load average
trois nombres. Ces nombres correspondent à la charge système dans 1
les 5
intervalles , et 15
minute.
Pour interpréter ces valeurs, il est important de connaître le nombre de processeurs disponibles dans le système, qui est obtenu à partir de la sortie précédente mpstat
. La valeur dépend du nombre total de processeurs. Par conséquent, en utilisant la mpstat
sortie comme exemple, le système a huit processeurs et une moyenne de 8
charge signifie que tous les cœurs sont chargés à 100 %.
La valeur de 4
cette valeur signifie que la moitié des processeurs sont chargées à 100 % (ou une charge totale de 50 % pour tous les processeurs). Dans la sortie précédente, la moyenne de charge est 9.26
, ce qui signifie que le processeur est chargé à environ 115 %.
Les 1m
intervalles et 15m
les intervalles 5m
permettent d’identifier si la charge augmente ou diminue au fil du temps.
En outre, la nproc
commande peut être utilisée pour récupérer le nombre de processeurs.
Mémoire
Pour la mémoire, deux commandes peuvent récupérer les détails de l’utilisation de la mémoire.
free
La free
commande affiche l’utilisation de la mémoire système.
Voici un exemple d’exécution free
:
-h
: cette option spécifie le format de sortie à lire par l’homme. Il convertit les tailles de mémoire d’octets en format plus lisible (kilo-octets, mégaoctets et gigaoctets) et ajoute les étiquettes d’unités appropriées (Ko, Mo et Go).
Comment lire la sortie gratuite
Voici un exemple de sortie de free
:
total used free shared buff/cache available
Mem: 31Gi 19Gi 12Gi 23Mi 87Mi 11Gi
Swap: 23Gi 0B 23Gi
À partir de la sortie, observez la total
mémoire système par rapport à la available
mémoire, et l’échange par rapport total
à la used
mémoire. La mémoire disponible prend en compte la mémoire allouée au cache, qui peut être retournée aux applications utilisateur. Certaines utilisations d’échange sont normales dans les noyaux modernes, car certaines pages de mémoire rarement utilisées peuvent être déplacées pour échanger.
swapon
La swapon
commande affiche l’emplacement où l’échange est configuré et les priorités respectives des appareils ou fichiers d’échange.
Voici un exemple d’exécution swapon
:
Voici un exemple de sortie de swapon
:
Filename Type Size Used Priority
/dev/zram0 partition 16G 0B 100
/mnt/swapfile file 8G 0B -2
Ces informations sont importantes pour vérifier si l’échange est configuré dans un emplacement non relatif, par exemple sur un disque de données ou de système d’exploitation. Dans la trame de référence Azure, l’échange doit être configuré sur le lecteur éphémère, car il offre les meilleures performances.
Considérations importantes
- N’oubliez pas que la mémoire est une ressource finie. Une fois que la mémoire système (RAM) et l’échange sont épuisées, le tueur en mémoire insuffisante (tueur OOM) tuera les processus.
- Vérifiez que l’échange n’est pas configuré sur un disque de données ou un disque de système d’exploitation, car cela peut entraîner des problèmes d’E/S en raison de différences de latence. L’échange doit être configuré sur le lecteur éphémère.
- Notez également qu’il est courant de voir les valeurs libres proches de zéro dans la
free -h
sortie. Ce comportement est dû au cache de page ; le noyau libère ces pages en fonction des besoins.
E/S
Les E/S de disque sont l’une des zones qu’Azure subit le plus lorsqu’elles sont limitées, car les latences sur les disques peuvent atteindre 100ms+
. Les commandes suivantes peuvent vous aider à identifier ces scénarios.
iostat
L’utilitaire iostat
fait partie du sysstat
package. Il affiche les statistiques d’utilisation de chaque appareil de bloc et permet d’identifier les problèmes de performances liés au bloc. Il fournit des détails sur les métriques telles que le débit, la latence et la taille de la file d’attente. Ces métriques permettent de comprendre si les E/S de disque deviennent un facteur de limitation.
Voici un exemple d’exécution iostat
:
-d
: rapport d’utilisation pour chaque appareil.-x
: statistiques étendues.-t
: affiche l’horodatage pour chaque rapport.-m
: affiche en Mo/s.1
: Le premier argument numérique indique la fréquence à laquelle actualiser l’affichage en secondes.2
: le deuxième argument numérique indique le nombre de fois que les données sont actualisées.
Comment lire la sortie iostat
Voici un exemple de sortie de iostat
:
Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9) 02/21/24 _x86_64_ (8 CPU)
02/21/24 16:55:50
Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz d/s dMB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
sda 1.07 0.02 0.00 0.00 1.95 20.40 23.25 24.55 3.30 12.42 113.75 1081.06 0.26 537.75 0.26 49.83 0.03 2083250.04 0.00 0.00 2.65 2.42
sdb 16.99 0.67 0.36 2.05 2.00 40.47 65.26 0.44 1.55 2.32 1.32 6.92 0.00 0.00 0.00 0.00 0.00 0.00 30.56 1.30 0.16 7.16
zram0 0.51 0.00 0.00 0.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
La sortie comporte plusieurs colonnes qui ne sont pas importantes (colonnes supplémentaires en raison de l’option -x
). Voici quelques-unes des principales :
r/s
: Opérations de lecture par seconde (IOPS).rMB/s
: Lecture de mégaoctets par seconde.r_await
: latence de lecture en millisecondes.rareq-sz
: Taille moyenne de la demande de lecture en kilo-octets.w/s
: opérations d’écriture par seconde (IOPS).wMB/s
: écrire des mégaoctets par seconde.w_await
: latence d’écriture en millisecondes.wareq-size
: Taille moyenne de la demande d’écriture en kilo-octets.aqu-sz
: Taille moyenne de la file d’attente.
Considérations importantes
r/s
Recherchez ,w/s
(IOPS)rMB/s
etwMB/s
vérifiez que ces valeurs se trouvent dans les limites du disque donné. Si les valeurs sont proches ou supérieures aux limites, le disque est limité, ce qui entraîne une latence élevée. Ces informations peuvent également être corroborées par la%iowait
métrique dempstat
.- La latence est une excellente métrique pour vérifier si le disque s’exécute comme prévu. Normalement, moins que
9ms
la latence attendue pour PremiumSSD. D’autres offres ont des cibles de latence différentes. - La taille de la file d’attente est un excellent indicateur de saturation. Normalement, les demandes sont traitées en quasi temps réel et le nombre reste proche d’un (car la file d’attente ne augmente jamais). Un nombre plus élevé peut indiquer la saturation du disque (autrement dit, les requêtes en file d’attente). Il n’y a pas de bon ou de mauvais nombre pour cette métrique. Comprendre qu’un nombre supérieur à un signifie que les requêtes sont mises en file d’attente permet de déterminer s’il existe une saturation du disque.
lsblk
L’utilitaire lsblk
affiche les périphériques de bloc attachés au système. Bien qu’il ne fournisse pas de métriques de performances, il permet une vue d’ensemble rapide de la façon dont ces appareils sont configurés et quels points de montage sont utilisés.
Voici un exemple d’exécution lsblk
:
Comment lire la sortie lsblk
Voici un exemple de sortie de lsblk
:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 300G 0 disk
└─sda1 8:1 0 300G 0 part /mnt
sdb 8:16 0 30G 0 disk
├─sdb1 8:17 0 1M 0 part
├─sdb2 8:18 0 200M 0 part /boot/efi
├─sdb3 8:19 0 1G 0 part /boot
└─sdb4 8:20 0 28.8G 0 part /
zram0 252:0 0 16G 0 disk [SWAP]
Considérations importantes
- Recherchez l’emplacement où les appareils sont montés.
- Vérifiez que l’échange n’est pas configuré à l’intérieur d’un disque de données ou d’un disque de système d’exploitation, s’il est activé.
- Un moyen simple de mettre en corrélation un appareil de bloc à un LUN dans Azure est en cours d’exécution
ls -lr /dev/disk/azure
.
Process
La collecte de détails par processus permet de comprendre l’emplacement de la charge système. L’utilitaire principal de collecte des statistiques de processus est pidstat
, car il fournit des détails sur les statistiques de processeur, de mémoire et d’E/S pour chaque processus. Enfin, un simple ps
tri du processus en fonction de l’utilisation supérieure du processeur et de la mémoire termine les métriques.
Note
Ces commandes nécessitent des privilèges racines à l’aide de l’utilisation sudo
pour afficher les détails de tous les processus en cours d’exécution, pas seulement ceux de l’utilisateur actuel.
pidstat
L’utilitaire pidstat
fait également partie du sysstat
package. Il est semblable mpstat
ou iostat dans le fait qu’il affiche des métriques pour un intervalle de temps donné. Par défaut, pidstat
affiche les métriques uniquement pour les processus avec activité.
Les arguments correspondants pidstat
sont les mêmes que pour les autres sysstat
utilitaires :
1
: Le premier argument numérique indique la fréquence à laquelle actualiser l’affichage en secondes.2
: le deuxième argument numérique indique le nombre de fois que les données sont actualisées.
Note
La sortie peut croître considérablement s’il existe de nombreux processus avec l’activité.
Traiter les statistiques du processeur
Pour collecter les statistiques du processeur de processus, exécutez pidstat
sans aucune option :
Guide pratique pour lire la sortie des statistiques du processeur
Voici un exemple de sortie de pidstat
:
Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9) 02/21/24 _x86_64_ (8 CPU)
# Time UID PID %usr %system %guest %wait %CPU CPU Command
16:55:48 0 66 0.0% 1.0% 0.0% 0.0% 1.0% 0 kworker/u16:2-xfs-cil/sdb4
16:55:48 0 70 0.0% 1.0% 0.0% 0.0% 1.0% 0 kworker/u16:6-xfs-cil/sdb4
16:55:48 0 92 0.0% 1.0% 0.0% 0.0% 1.0% 3 kworker/3:1H-kblockd
16:55:48 0 308 0.0% 1.0% 0.0% 0.0% 1.0% 1 kworker/1:1H-kblockd
16:55:48 0 2068 0.0% 1.0% 0.0% 0.0% 1.0% 1 kworker/1:3-xfs-conv/sdb4
16:55:48 0 2181 63.1% 1.0% 0.0% 35.9% 64.1% 5 stress-ng-cpu
16:55:48 0 2182 28.2% 0.0% 0.0% 70.9% 28.2% 6 stress-ng-cpu
16:55:48 0 2183 28.2% 0.0% 0.0% 69.9% 28.2% 7 stress-ng-cpu
16:55:48 0 2184 62.1% 0.0% 0.0% 36.9% 62.1% 0 stress-ng-cpu
16:55:48 0 2185 43.7% 0.0% 0.0% 54.4% 43.7% 2 stress-ng-cpu
16:55:48 0 2186 30.1% 0.0% 0.0% 68.0% 30.1% 7 stress-ng-cpu
16:55:48 0 2187 64.1% 0.0% 0.0% 34.0% 64.1% 3 stress-ng-cpu
La commande affiche l’utilisation de %usr
, %system
( %guest
non applicable à Azure) %wait
et l’utilisation totale %CPU
pour chaque processus.
Considérations importantes
- Recherchez des processus avec des pourcentages élevés
%wait
(iowait), car il peut indiquer des processus qui sont bloqués en attente d’E/S, ce qui peut également indiquer la saturation du disque. - Vérifiez qu’aucun processus unique ne consomme 100 % de l’UC, car il peut indiquer une application à thread unique.
Traiter les statistiques de mémoire
Pour collecter les statistiques de mémoire du processus, utilisez l’option -r
suivante :
Comment lire la sortie des statistiques de mémoire
Voici un exemple de sortie de pidstat
:
Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9) 02/21/24 _x86_64_ (8 CPU)
# Time UID PID minflt/s majflt/s VSZ RSS %MEM Command
16:55:49 0 2199 119244.12 0.00 13.6G 7.4G 23.5% stress-ng-vm
16:55:49 0 2200 392911.76 0.00 13.6G 9.3G 29.7% stress-ng-vm
16:55:49 0 2211 1129.41 0.00 72.3M 3.2M 0.0% stress-ng-iomix
16:55:49 0 2220 0.98 0.00 71.8M 2.4M 0.0% stress-ng-iomix
16:55:49 0 2239 1129.41 0.00 72.3M 3.2M 0.0% stress-ng-iomix
16:55:49 0 2240 1129.41 0.00 72.3M 3.2M 0.0% stress-ng-iomix
16:55:49 0 2256 0.98 0.00 71.8M 2.4M 0.0% stress-ng-iomix
16:55:49 0 2265 1129.41 0.00 72.3M 3.2M 0.0% stress-ng-iomix
Les métriques collectées sont les suivantes :
minflt/s
: erreurs mineures par seconde. Cette métrique indique le nombre de pages chargées à partir de la mémoire système (RAM).mjflt/s
: Erreurs majeures par seconde. Cette métrique indique le nombre de pages chargées à partir du disque (SWAP).VSZ
: mémoire virtuelle utilisée en octets.RSS
: mémoire résidente utilisée (mémoire allouée réelle) en octets.%MEM
: pourcentage de mémoire totale utilisée.Command
: nom du processus.
Considérations importantes
- Recherchez les erreurs majeures par seconde, car cette valeur indiquerait un processus qui échange des pages vers ou depuis le disque. Ce comportement peut indiquer l’épuisement de la mémoire et entraîner une
OOM
dégradation des événements ou des performances en raison d’un échange plus lent. - Vérifiez qu’un seul processus ne consomme pas 100 % de la mémoire disponible. Ce comportement peut indiquer une fuite de mémoire.
Conseil
L’option --human
peut être utilisée pour afficher des nombres dans un format lisible par l’homme (autrement dit, Ko, Mo et Go).
Traiter les statistiques d’E/S
Pour collecter les statistiques d’E/S de processus, utilisez l’option -d
suivante :
Voici un exemple de sortie de pidstat
:
# Time UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
16:55:50 0 86 55.4k 0.0B 0.0B 0 kworker/1:1-xfs-conv/sdb4
16:55:50 0 2201 4.0k 194.1k 0.0B 0 stress-ng-iomix
16:55:50 0 2202 0.0B 99.0k 0.0B 0 stress-ng-iomix
16:55:50 0 2203 0.0B 23.8k 0.0B 0 stress-ng-iomix
16:55:50 0 2204 0.0B 15.8k 0.0B 0 stress-ng-iomix
16:55:50 0 2212 0.0B 103.0k 0.0B 0 stress-ng-iomix
16:55:50 0 2213 4.0k 99.0k 0.0B 0 stress-ng-iomix
16:55:50 0 2215 0.0B 178.2k 0.0B 0 stress-ng-iomix
16:55:50 0 2216 7.9k 237.6k 0.0B 0 stress-ng-iomix
16:55:50 0 2218 0.0B 95.0k 0.0B 0 stress-ng-iomix
16:55:50 0 2221 0.0B 15.8k 0.0B 0 stress-ng-iomix
Les métriques collectées sont les suivantes :
kB_rd/s
: Lecture de kilo-octets par seconde.kB_wr/s
: écrire des kilo-octets par seconde.Command
: nom du processus.
Considérations importantes
- Recherchez des processus uniques avec des taux élevés de lecture/écriture par seconde. Ces informations sont des conseils pour les processus avec des E/S plus que l’identification des problèmes.
Conseil
L’option --human
peut être utilisée pour afficher des nombres dans un format lisible par l’homme (autrement dit, Ko, Mo et Go).
Ps
Enfin, la ps
commande affiche les processus système et peut être triée par processeur ou mémoire.
Pour trier %CPU
et obtenir les 10 premiers processus :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2190 94.8 0.0 73524 5588 pts/1 R+ 16:55 0:14 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2200 56.8 43.1 14248092 14175632 pts/1 R+ 16:55 0:08 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2192 50.6 0.0 73524 5836 pts/1 R+ 16:55 0:07 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2184 50.4 0.0 73524 5836 pts/1 R+ 16:55 0:07 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2182 44.3 0.0 73524 5808 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2187 43.4 0.0 73524 5708 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2199 42.9 33.0 14248092 10845272 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2186 42.0 0.0 73524 5836 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2191 41.2 0.0 73524 5592 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
Pour trier %MEM
et obtenir les 10 premiers processus :
PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2200 57.0 43.1 14248092 14175632 pts/1 R+ 16:55 0:08 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2199 43.0 33.0 14248092 10871144 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 1231 0.2 0.1 336308 33764 ? Sl 16:46 0:01 /usr/bin/python3 -u bin/WALinuxAgent-2.9.1.1-py3.8.egg -run-exthandlers
root 835 0.0 0.0 127076 24860 ? Ssl 16:46 0:00 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
root 1199 0.0 0.0 30164 15600 ? Ss 16:46 0:00 /usr/bin/python3 -u /usr/sbin/waagent -daemon
root 1 0.2 0.0 173208 12356 ? Ss 16:46 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 31
root 966 0.0 0.0 3102460 10936 ? Sl 16:46 0:00 /var/lib/waagent/Microsoft.GuestConfiguration.ConfigurationforLinux-1.26.60/GCAgent/GC/gc_linux_service
panzer 1803 0.0 0.0 22360 8220 ? Ss 16:49 0:00 /usr/lib/systemd/systemd --user
root 2180 0.0 0.0 73524 6968 pts/1 SL+ 16:55 0:00 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
Consolider les rapports
Le script Bash suivant peut collecter tous les détails dans une seule exécution et ajouter la sortie à un fichier pour une référence ultérieure :
mpstat -P ALL 1 2 && vmstat -w 1 5 && uptime && free -h && swapon && iostat -dxtm 1 1 && lsblk && ls -l /dev/disk/azure && pidstat 1 1 -h --human && pidstat -r 1 1 -h --human && pidstat -d 1 1 -h --human && ps aux --sort=-%cpu | head -20 && ps aux --sort=-%mem | head -20
Pour exécuter, créez un fichier avec le contenu précédent, ajoutez execute
des autorisations en exécutant chmod +x gather.sh
, puis exécutez avec sudo ./gather.sh
.
Ce script enregistre la sortie des commandes dans un fichier situé dans le même répertoire que celui où le script a été appelé.
En outre, toutes les commandes des codes de bloc Bash abordés dans ce document peuvent être exécutées via Azure CLI à l’aide de l’extension run-command
et de l’analyse de la sortie jq
pour obtenir des sorties similaires à l’exécution des commandes localement.
az vm run-command invoke -g $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts "ls -l /dev/disk/azure" | jq -r '.value[0].message'
Exclusion de responsabilité de tiers
Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.
Contactez-nous pour obtenir de l’aide
Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.