Partager via


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 :

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 :

sudo apt install sysstat -y

Red Hat :

sudo dnf install sysstat -y

SUSE :

sudo zypper install sysstat --non-interactive

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:

mpstat -P ALL 1 2
  • -P: indique le processeur à afficher les statistiques, et l’argument ALL 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) auquel mpstat doit actualiser et afficher de nouvelles statistiques.
  • 2: le deuxième argument numérique spécifie le nombre de fois mpstat 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’identificateur all 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:

vmstat -w 1 5
  • -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. Avec 5 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.

uptime

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 1les 5intervalles , 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 1mintervalles et 15m les intervalles 5mpermettent 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:

free -h
  • -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:

swapon -s

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:

iostat -dxtm 1 5
  • -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/sRecherchez , w/s (IOPS) rMB/set wMB/své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 de mpstat.
  • 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:

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 :

pidstat 1 2
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) %waitet 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 :

pidstat -r 1 2
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 :

pidstat -d 1 2

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 :

ps aux --sort=-%cpu | head -10
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 :

ps aux --sort=-%mem| head -10
       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.