Partager via


Résoudre les problèmes de performances et isoler les goulots d’étranglement dans Linux

Problèmes de performances et goulots d’étranglement

Lorsque des problèmes de performances se produisent dans différents systèmes d’exploitation et applications, chaque cas nécessite une approche unique pour résoudre les problèmes. Le processeur, la mémoire, la mise en réseau et l’entrée/sortie (E/S) sont des domaines clés où des problèmes peuvent se produire. Chacun de ces domaines présente des symptômes différents (parfois simultanément) et nécessite des diagnostics et des solutions différents.

Les problèmes de performances peuvent être causés par une configuration incorrecte de l’application ou de l’installation. Par exemple, une application web qui a une couche de mise en cache qui n’est pas correctement configurée. Cette situation déclenche davantage de requêtes qui reviennent au serveur d’origine au lieu d’être traitées à partir d’un cache.

Dans un autre exemple, le journal de restauration par progression d’une base de données MySQL ou MariaDB se trouve sur le disque du système d’exploitation ou sur un disque qui ne répond pas aux exigences de la base de données. Dans ce scénario, vous pouvez voir moins de transactions par seconde (TPS) en raison de la concurrence pour les ressources et des temps de réponse plus élevés (latence).

Si vous comprenez parfaitement le problème, vous pouvez mieux identifier où regarder dans la pile (processeur, mémoire, mise en réseau, E/S). Pour résoudre les problèmes de performances, vous devez établir une base de référence qui vous permet de comparer les métriques après avoir apporté des modifications et d’évaluer si les performances globales ont été améliorées.

La résolution des problèmes de performances d’une machine virtuelle n’est pas différente de la résolution d’un problème de performances sur un système physique. Il s’agit de déterminer quelle ressource ou quel composant est à l’origine d’un goulot d’étranglement dans le système.

Il est important de comprendre que les goulots d’étranglement existent toujours. La résolution des problèmes de performances consiste à comprendre où se produit un goulot d’étranglement et à le déplacer vers une ressource moins incriminant.

Ce guide vous aide à découvrir et à résoudre les problèmes de performances dans Azure Machines Virtuelles dans l’environnement Linux.

Obtenir des pointeurs de performances

Vous pouvez obtenir des pointeurs de performances qui confirment ou nient si la contrainte de ressource existe.

En fonction de la ressource examinée, de nombreux outils peuvent vous aider à obtenir des données relatives à cette ressource. Le tableau suivant contient des exemples pour les ressources main.

Resource Outil
UC top, htop, mpstat, pidstat, vmstat
Disque iostat, iotop, vmstat
Réseau ip, vnstat, iperf3
Mémoire free, top, vmstat

Les sections suivantes traitent des pointeurs et des outils que vous pouvez utiliser pour rechercher les ressources main.

Ressource d’UC

Un certain pourcentage de processeur est utilisé ou non. De même, les processus passent du temps dans le processeur (par exemple, 80 % usr d’utilisation) ou non (par exemple, 80 % d’inactivité). L’outil main pour confirmer l’utilisation du processeur est top.

L’outil top s’exécute en mode interactif par défaut. Il s’actualise toutes les secondes et affiche les processus comme triés par utilisation du processeur :

[root@rhel78 ~]$ top
top - 19:02:00 up  2:07,  2 users,  load average: 1.04, 0.97, 0.96
Tasks: 191 total,   3 running, 188 sleeping,   0 stopped,   0 zombie
%Cpu(s): 29.2 us, 22.0 sy,  0.0 ni, 48.5 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  7990204 total,  6550032 free,   434112 used,  1006060 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  7243640 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 22804 root      20   0  108096    616    516 R  99.7  0.0   1:05.71 dd
  1680 root      20   0  410268  38596   5644 S   3.0  0.5   2:15.10 python
   772 root      20   0   90568   3240   2316 R   0.3  0.0   0:08.11 rngd
  1472 root      20   0  222764   6920   4112 S   0.3  0.1   0:00.55 rsyslogd
 10395 theuser   20   0  162124   2300   1548 R   0.3  0.0   0:11.93 top
     1 root      20   0  128404   6960   4148 S   0.0  0.1   0:04.97 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.56 ksoftirqd/0
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.07 migration/0
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S   0.0  0.0   0:06.00 rcu_sched
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.05 watchdog/0
    12 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 watchdog/1
    13 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/1
    14 root      20   0       0      0      0 S   0.0  0.0   0:00.21 ksoftirqd/1
    16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H
    18 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kdevtmpfs
    19 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns
    20 root      20   0       0      0      0 S   0.0  0.0   0:00.00 khungtaskd
    21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback
    22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd

À présent, examinez la dd ligne de processus à partir de cette sortie :

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 22804 root      20   0  108096    616    516 R  99.7  0.0   1:05.71 dd

Vous pouvez voir que le dd processus consomme 99,7 % du processeur.

Remarque

  • Vous pouvez afficher l’utilisation par processeur dans l’outil top en sélectionnant 1.

  • L’outil top affiche une utilisation totale de plus de 100 % si le processus est multithread et s’étend sur plusieurs processeurs.

Une autre référence utile est la moyenne de charge. La moyenne de charge indique une charge système moyenne par intervalles de 1 minute, 5 minutes et 15 minutes. La valeur indique le niveau de charge du système. L’interprétation de cette valeur dépend du nombre d’uc disponibles. Par exemple, si la charge moyenne est de 2 sur un système à un processeur, le système est chargé de telle sorte que les processus commencent à mettre en file d’attente. S’il y a une charge moyenne de 2 sur un système à quatre processeurs, l’utilisation globale du processeur est d’environ 50 %.

Remarque

Vous pouvez obtenir rapidement le nombre de processeurs en exécutant la nproc commande .

Dans l’exemple précédent, la charge moyenne est de 1,04. Il s’agit d’un système à deux processeurs, ce qui signifie qu’il y a environ 50 % d’utilisation du processeur. Vous pouvez vérifier ce résultat si vous remarquez la valeur du processeur inactif de 48,5 %. (Dans la sortie de la top commande, la valeur du processeur inactif est affichée avant l’étiquette id .)

Utilisez la moyenne de charge comme vue d’ensemble rapide des performances du système.

Exécutez la uptime commande pour obtenir la moyenne de charge.

Ressource de disque (E/S)

Lorsque vous examinez les problèmes de performances d’E/S, les termes suivants vous aident à comprendre où le problème se produit.

Term Description
Taille d’E/S Quantité de données traitées par transaction, généralement définie en octets.
Threads d’E/S Nombre de processus qui interagissent avec le périphérique de stockage. Cette valeur dépend de l’application.
Taille du bloc Taille d’E/S définie par l’appareil de bloc de stockage.
Taille du secteur Taille de chacun des secteurs sur le disque. Cette valeur est généralement de 512 octets.
E/S par seconde Opérations de sortie d’entrée par seconde.
Latence Temps nécessaire à la fin d’une opération d’E/S. Cette valeur est généralement mesurée en millisecondes (ms).
Débit Fonction de la quantité de données transférées sur une période spécifique. Cette valeur est généralement définie en mégaoctets par seconde (Mo/s).

E/S par seconde

Les opérations de sortie d’entrée par seconde (IOPS) sont une fonction du nombre d’opérations d’entrée et de sortie (E/S) mesurées sur une certaine période (dans ce cas, secondes). Les opérations d’E/S peuvent être des lectures ou des écritures. Les suppressions ou les abandons peuvent également être comptabilisés comme une opération sur le système de stockage. Chaque opération a une unité d’allocation qui correspond également à la taille d’E/S.

La taille des E/S est généralement définie au niveau de l’application en tant que quantité de données écrites ou lues par transaction. Une taille d’E/S couramment utilisée est 4K. Toutefois, une taille d’E/S plus petite qui contient plus de threads génère une valeur d’IOPS plus élevée. Étant donné que chaque transaction peut être effectuée relativement rapidement (en raison de sa petite taille), une E/S plus petite permet d’effectuer plus de transactions dans le même laps de temps.

Au contraire, supposons que vous avez le même nombre de threads, mais que vous utilisez une E/S plus grande. Les IOPS diminuent, car chaque transaction prend plus de temps. Toutefois, le débit augmente.

Prenons l'exemple suivant :

1 000 IOPS signifie que pour chaque seconde, mille opérations se terminent. Chaque opération prend environ une milliseconde. (Il y a 1 000 millisecondes en une seconde.) En théorie, chaque transaction a environ une milliseconde à terminer, ou une latence d’environ 1 ms.

En connaissant la valeur IOSize et les IOPS, vous pouvez calculer le débit en multipliant IOSize par IOPS.

Par exemple :

  • 1 000 IOPS à 4 Ko IOSize = 4 000 Ko/s, ou 4 Mo/s (3,9 Mo/s pour être précis)

  • 1 000 IOPS à 1M IOSize = 1 000 Mo/s, ou 1 Go/s (976 Mo/s pour être précis)

Une version plus adaptée aux équations peut être écrite comme suit :

IOPS * IOSize = IOSize/s (Throughput)

Débit

Contrairement aux IOPS, le débit est une fonction de la quantité de données dans le temps. Cela signifie qu’au cours de chaque seconde, une certaine quantité de données est écrite ou lue. Cette vitesse est mesurée en <quantité de temps de données>/<, ou mégaoctets par seconde (Mo/>s).

Si vous connaissez les valeurs débit et IOSize, vous pouvez calculer les IOPS en divisant le débit par IOSize. Vous devez normaliser les unités à la plus petite connotation. Par exemple, si IOSize est défini en kilo-octets (Ko), le débit doit être converti.

Le format de l’équation est écrit comme suit :

Throughput / IOSize = IOPS

Pour mettre cette équation en contexte, envisagez un débit de 10 Mo/s à une taille IOS de 4K. Lorsque vous entrez les valeurs dans l’équation, le résultat est 10 240/4 = 2 560 IOPS.

Remarque

10 Mo est précisément égal à 10 240 Ko.

Latence

La latence est la mesure du temps moyen nécessaire à chaque opération pour se terminer. Les IOPS et la latence sont liées, car les deux concepts sont une fonction du temps. Par exemple, à 100 IOPS, chaque opération prend environ 10 ms. Mais la même quantité de données peut être récupérée encore plus rapidement avec des IOPS inférieures. La latence est également appelée temps de recherche.

Comprendre la sortie iostat

Dans le cadre du package sysstat, l’outil fournit des insights sur les iostat métriques de performances et d’utilisation des disques. iostat peut aider à identifier les goulots d’étranglement liés au sous-système de disque.

Vous pouvez exécuter iostat dans une commande simple. La syntaxe de base est la suivante :

iostat <parameters> <time-to-refresh-in-seconds> <number-of-iterations> <block-devices>

Les paramètres déterminent les informations iostat fournies. Sans aucun paramètre de commande, iostat affiche les détails de base :

[host@rhel76 ~]$ iostat
Linux 3.10.0-957.21.3.el7.x86_64 (rhel76)       08/05/2019      _x86_64_        (1 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          41.06    0.00   30.47   21.00    0.00    7.47
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             182.77      5072.69      1066.64     226090      47540
sdd               2.04        42.56        22.98       1897       1024
sdb              12.61       229.23     96065.51      10217    4281640
sdc               2.56        46.16        22.98       2057       1024
md0               2.67        73.60        45.95       3280       2048

Par défaut, iostat affiche les données de tous les appareils de bloc existants, bien que des données minimales soient fournies pour chaque appareil. Les paramètres disponibles permettent d’identifier les problèmes en fournissant des données étendues (comme le débit, les IOPS, la taille de la file d’attente et la latence).

Exécutez iostat en spécifiant les déclencheurs :

sudo iostat -dxctm 1

Pour développer davantage les iostat résultats, utilisez les paramètres suivants.

Paramètre Action
-d Affichez le rapport d’utilisation de l’appareil.
-x Afficher des statistiques étendues. Ce paramètre est important, car il fournit des IOPS, une latence et des tailles de file d’attente.
-c Affichez le rapport d’utilisation du processeur.
-t Imprimez l’heure de chaque rapport affiché. Ce paramètre est utile pour les exécutions longues.
-m Affiche les statistiques en mégaoctets par seconde, une forme plus lisible par l’homme.

Le chiffre 1 dans la commande indique iostat d’actualiser toutes les secondes. Pour arrêter l’actualisation, sélectionnez Ctrl+C.

Si vous incluez les paramètres supplémentaires, la sortie ressemble au texte suivant :

    [host@rhel76 ~]$ iostat -dxctm 1
    Linux 3.10.0-957.21.3.el7.x86_64 (rhel76)       08/05/2019      _x86_64_        (1 CPU)
        08/05/2019 07:03:36 PM
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               3.09    0.00    2.28    1.50    0.00   93.14
    
    Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
    sda               0.02     0.52    9.66    2.46     0.31     0.10    70.79     0.27   23.97    6.68   91.77   2.94   3.56
    sdd               0.00     0.00    0.12    0.00     0.00     0.00    64.20     0.00    6.15    6.01   12.50   4.44   0.05
    sdb               0.00    22.90    0.47    0.45     0.01     5.74 12775.08     0.17  183.10    8.57  367.68   8.01   0.74
    sdc               0.00     0.00    0.15    0.00     0.00     0.00    54.06     0.00    6.46    6.24   14.67   5.64   0.09
    md0               0.00     0.00    0.15    0.01     0.00     0.00    89.55     0.00    0.00    0.00    0.00   0.00   0.00

Comprendre les valeurs

Les colonnes main de la iostat sortie sont indiquées dans le tableau suivant.

Colonne Description
r/s Lectures par seconde (IOPS)
w/s Écritures par seconde (IOPS)
rMB/s Mégaoctets de lecture par seconde (débit)
wMB/s Écrire des mégaoctets par seconde (débit)
avgrq-sz Taille moyenne des E/S dans les secteurs ; multiplier ce nombre par la taille du secteur, qui est généralement de 512 octets, pour obtenir la taille d’E/S en octets (taille d’E/S)
avgqu-sz Taille moyenne de la file d’attente (nombre d’opérations d’E/S en file d’attente en attente d’être servies)
await Temps moyen en millisecondes pour les E/S prises en charge par l’appareil (latence)
r_await Temps de lecture moyen en millisecondes pour les E/S prises en charge par l’appareil (latence)
w_await Temps de lecture moyen en millisecondes pour les E/S prises en charge par l’appareil (latence)

Les données présentées par iostat sont informatives, mais la présence de certaines données dans certaines colonnes ne signifie pas qu’il y a un problème. Les données provenant de iostat doivent toujours être capturées et analysées pour détecter les goulots d’étranglement possibles. Une latence élevée peut indiquer que le disque atteint un point de saturation.

Remarque

Vous pouvez utiliser la commande pour afficher les pidstat -d statistiques d’E/S par processus.

Ressource réseau

Les réseaux peuvent rencontrer deux goulots d’étranglement main : une faible bande passante et une latence élevée.

Vous pouvez utiliser vnstat pour capturer en direct les détails de la bande passante. Toutefois, vnstat n’est pas disponible dans toutes les distributions. L’outil largement disponible iptraf-ng est une autre option pour afficher le trafic d’interface en temps réel.

Latence réseau

La latence réseau dans deux systèmes différents peut être déterminée à l’aide d’une commande simple ping dans Internet Control Message Protocol (ICMP) :

[root@rhel78 ~]# ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=53 time=5.33 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=53 time=5.29 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=53 time=5.29 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=53 time=5.24 ms
^C
--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 5.240/5.291/5.339/0.035 ms

Pour arrêter l’activité ping, sélectionnez Ctrl+C.

Bande passante réseau

Vous pouvez vérifier la bande passante réseau à l’aide d’outils tels que iperf3. L’outil iperf3 fonctionne sur le modèle serveur/client dans lequel l’application est démarrée en spécifiant l’indicateur -s sur le serveur. Les clients se connectent ensuite au serveur en spécifiant l’adresse IP ou le nom de domaine complet (FQDN) du serveur conjointement avec l’indicateur -c . Les extraits de code suivants montrent comment utiliser l’outil iperf3 sur le serveur et le client.

  • Server

    root@ubnt:~# iperf3 -s
    -----------------------------------------------------------
    Server listening on 5201
    -----------------------------------------------------------
    
  • Client

    root@ubnt2:~# iperf3 -c 10.1.0.4
    Connecting to host 10.1.0.4, port 5201
    [  5] local 10.1.0.4 port 60134 connected to 10.1.0.4 port 5201
    [ ID] Interval           Transfer     Bitrate         Retr  Cwnd
    [  5]   0.00-1.00   sec  5.78 GBytes  49.6 Gbits/sec    0   1.25 MBytes
    [  5]   1.00-2.00   sec  5.81 GBytes  49.9 Gbits/sec    0   1.25 MBytes
    [  5]   2.00-3.00   sec  5.72 GBytes  49.1 Gbits/sec    0   1.25 MBytes
    [  5]   3.00-4.00   sec  5.76 GBytes  49.5 Gbits/sec    0   1.25 MBytes
    [  5]   4.00-5.00   sec  5.72 GBytes  49.1 Gbits/sec    0   1.25 MBytes
    [  5]   5.00-6.00   sec  5.64 GBytes  48.5 Gbits/sec    0   1.25 MBytes
    [  5]   6.00-7.00   sec  5.74 GBytes  49.3 Gbits/sec    0   1.31 MBytes
    [  5]   7.00-8.00   sec  5.75 GBytes  49.4 Gbits/sec    0   1.31 MBytes
    [  5]   8.00-9.00   sec  5.75 GBytes  49.4 Gbits/sec    0   1.31 MBytes
    [  5]   9.00-10.00  sec  5.71 GBytes  49.1 Gbits/sec    0   1.31 MBytes
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bitrate         Retr
    [  5]   0.00-10.00  sec  57.4 GBytes  49.3 Gbits/sec    0             sender
    [  5]   0.00-10.04  sec  57.4 GBytes  49.1 Gbits/sec                  receiver
    
    iperf Done.
    

Certains paramètres courants iperf3 pour le client sont indiqués dans le tableau suivant.

Paramètre Description
-P Spécifie le nombre de flux clients parallèles à exécuter.
-R Inverse le trafic. Par défaut, le client envoie des données au serveur.
--bidir Teste à la fois le chargement et le téléchargement.

Ressource mémoire

La mémoire est une autre ressource de résolution des problèmes à case activée, car les applications peuvent ou non utiliser une partie de la mémoire. Vous pouvez utiliser des outils tels que free et top pour passer en revue l’utilisation globale de la mémoire et déterminer la quantité de mémoire consommée par différents processus :

[root@rhel78 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7802         435        5250           9        2117        7051
Swap:             0           0           0

Dans les systèmes Linux, il est courant de voir une utilisation de la mémoire de 99 %. Dans la free sortie, il y a une colonne nommée buff/cache. Le noyau Linux utilise de la mémoire libre (inutilisée) pour mettre en cache les demandes d’E/S afin de bénéficier de meilleurs temps de réponse. Ce processus est appelé cache de page. Pendant la sollicitation de la mémoire (scénarios dans lesquels la mémoire est faible), le noyau retourne la mémoire utilisée pour le cache de page afin que les applications puissent utiliser cette mémoire.

Dans la free sortie, la colonne disponible indique la quantité de mémoire disponible pour les processus à consommer. Cette valeur est calculée en ajoutant les quantités de mémoire buff/cache et de mémoire libre.

Vous pouvez configurer la commande pour trier les top processus par utilisation de la mémoire. Par défaut, top trie par pourcentage d’UC (%). Pour trier par utilisation de la mémoire (%), sélectionnez Maj+M lorsque vous exécutez top. Le texte suivant montre la sortie de la top commande :

[root@rhel78 ~]# top
top - 22:40:15 up  5:45,  2 users,  load average: 0.08, 0.08, 0.06
Tasks: 194 total,   2 running, 192 sleeping,   0 stopped,   0 zombie
%Cpu(s): 12.3 us, 41.8 sy,  0.0 ni, 45.4 id,  0.0 wa,  0.0 hi,  0.5 si,  0.0 st
KiB Mem :  7990204 total,   155460 free,  5996980 used,  1837764 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1671420 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 45283 root      20   0 5655348   5.3g    512 R  99.7 69.4   0:03.71 tail
  3124 omsagent  20   0  415316  54112   5556 S   0.0  0.7   0:30.16 omsagent
  1680 root      20   0  413500  41552   5644 S   3.0  0.5   6:14.96 python
[...]

La RES colonne indique la mémoire résidente. Cela représente l’utilisation réelle du processus. L’outil top fournit une sortie similaire à free en termes de kilo-octets (Ko).

L’utilisation de la mémoire peut augmenter plus que prévu si l’application rencontre des fuites de mémoire. Dans un scénario de fuite de mémoire, les applications ne peuvent pas libérer de pages mémoire qui ne sont plus utilisées.

Voici une autre commande utilisée pour afficher les principaux processus consommant de la mémoire :

ps -eo pid,comm,user,args,%cpu,%mem --sort=-%mem | head

Le texte suivant montre un exemple de sortie de la commande :

[root@rhel78 ~]# ps -eo pid,comm,user,args,%cpu,%mem --sort=-%mem | head
   PID COMMAND         USER     COMMAND                     %CPU %MEM
 45922 tail            root     tail -f /dev/zero           82.7 61.6
[...]

Vous pouvez identifier la sollicitation de la mémoire à partir d’événements d’arrêt de mémoire insuffisante (OOM), comme illustré dans l’exemple de sortie suivant :

Jun 19 22:42:14 rhel78 kernel: Out of memory: Kill process 45465 (tail) score 902 or sacrifice child
Jun 19 22:42:14 rhel78 kernel: Killed process 45465 (tail), UID 0, total-vm:7582132kB, anon-rss:7420324kB, file-rss:0kB, shmem-rss:0kB

OOM est appelé une fois que la RAM (mémoire physique) et l’ÉCHANGE (disque) sont consommées.

Remarque

Vous pouvez utiliser la commande pour afficher les pidstat -r statistiques de mémoire par processus.

Déterminer si une contrainte de ressource existe

Vous pouvez déterminer si une contrainte existe en utilisant les indicateurs précédents et en connaissant la configuration actuelle. La contrainte peut être comparée à la configuration existante.

Voici un exemple de contrainte de disque :

Une machine virtuelle D2s_v3 est capable de 48 Mo/s de débit non mis en cache. À cette machine virtuelle, un disque P30 capable de 200 Mo/s est attaché. L’application nécessite un minimum de 100 Mo/s.

Dans cet exemple, la ressource de limitation est le débit de la machine virtuelle globale. L’exigence de l’application par rapport à ce que la configuration du disque ou de la machine virtuelle peut fournir indique la ressource contraignante.

Si l’application nécessite <une ressource> measurement1>< et que la configuration actuelle de <la ressource> est capable de fournir uniquement <la mesure2>, cette exigence peut être un facteur de limitation.

Définir la ressource de limitation

Après avoir déterminé qu’une ressource est le facteur de limitation dans la configuration actuelle, identifiez comment elle peut être modifiée et comment elle affecte la charge de travail. Il existe des situations dans lesquelles la limitation des ressources peut exister en raison d’une mesure de réduction des coûts, mais l’application est toujours en mesure de gérer le goulot d’étranglement sans problème.

Par exemple :

Si l’application nécessite 128 Go (mesure) de RAM (ressource) et que la configuration actuelle de la RAM (ressource) est capable de fournir seulement 64 Go (mesure), cette exigence peut être un facteur de limitation.

À présent, vous pouvez définir la ressource de limitation et prendre des mesures en fonction de cette ressource. Le même concept s’applique à d’autres ressources.

Si ces ressources limitantes sont attendues comme mesure de réduction des coûts, l’application doit contourner les goulots d’étranglement. Toutefois, si les mêmes mesures d’économie de coûts existent et que l’application ne peut pas facilement gérer le manque de ressources, cette configuration peut entraîner des problèmes.

Apporter des modifications en fonction des données obtenues

La conception de performances ne consiste pas à résoudre les problèmes, mais à comprendre où le goulot d’étranglement suivant peut se produire et comment le contourner. Les goulots d’étranglement existent toujours et peuvent uniquement être déplacés vers un autre emplacement de la conception.

Par exemple, si l’application est limitée par les performances du disque, vous pouvez augmenter la taille du disque pour permettre un débit plus élevé. Toutefois, le réseau devient alors le goulot d’étranglement suivant. Étant donné que les ressources sont limitées, il n’existe pas de configuration idéale et vous devez résoudre les problèmes régulièrement.

En obtenant des données dans les étapes précédentes, vous pouvez désormais apporter des modifications en fonction de données réelles et mesurables. Vous pouvez également comparer ces modifications à la base de référence que vous avez mesurée précédemment pour vérifier qu’il existe une différence tangible.

Prenons l'exemple suivant :

Lorsque vous avez obtenu une base de référence pendant l’exécution de l’application, vous avez déterminé que le système avait une utilisation constante du processeur à 100 % dans une configuration de deux processeurs. Vous avez observé une charge moyenne de 4. Cela signifiait que le système faisait la file d’attente des requêtes. Une modification apportée à un système à 8 processeurs a réduit l’utilisation du processeur à 25 % et la moyenne de charge a été réduite à 2 lorsque la même charge a été appliquée.

Dans cet exemple, il existe une différence mesurable lorsque vous comparez les résultats obtenus aux ressources modifiées. Avant la modification, il y avait une contrainte de ressource claire. Mais après la modification, il y a suffisamment de ressources pour augmenter la charge.

Migrer d’un environnement local vers le cloud

Les migrations d’une installation locale vers le cloud computing peuvent être affectées par plusieurs différences de performances.

UC

En fonction de l’architecture, une installation locale peut exécuter des processeurs qui ont des vitesses d’horloge plus élevées et des caches plus volumineux. Le résultat serait une réduction des temps de traitement et une augmentation des instructions par cycle (IPC). Il est important de comprendre les différences entre les modèles d’UC et les métriques lorsque vous travaillez sur des migrations. Dans ce cas, une relation un-à-un entre les nombres de processeurs peut ne pas suffire.

Par exemple :

Dans un système local qui dispose de quatre processeurs qui s’exécutent à 3,7 GHz, un total de 14,8 GHz est disponible pour le traitement. Si l’équivalent en nombre d’UC est créé à l’aide d’une machine virtuelle D4s_v3 soutenue par des processeurs de 2,1 GHz, la machine virtuelle migrée dispose de 8,1 GHz disponibles pour le traitement. Cela représente une diminution d’environ 44 % des performances.

Disque

Les performances du disque dans Azure sont définies par le type et la taille du disque (à l’exception du disque Ultra, qui offre une flexibilité en termes de taille, d’IOPS et de débit). La taille du disque définit les limites d’IOPS et de débit.

La latence est une métrique qui dépend du type de disque plutôt que de la taille du disque. La plupart des solutions de stockage local sont des baies de disques qui ont des caches DRAM. Ce type de cache fournit une latence inférieure à la milliseconde (environ 200 microsecondes) et un débit de lecture/écriture (IOPS) élevé.

Les latences Azure moyennes sont indiquées dans le tableau suivant.

Type de disque Latence
Disque Ultra/SSD Premium v2 μs à trois chiffres (microsecondes)
SSD Premium/SSD Standard Ms à un chiffre (millisecondes)
Standard HDD Ms à deux chiffres (millisecondes)

Remarque

Un disque est limité s’il atteint ses limites d’IOPS ou de bande passante, car sinon, la latence peut atteindre 100 millisecondes ou plus.

La différence de latence entre un disque local (souvent inférieur à une milliseconde) et un SSD Premium (millisecondes à un chiffre) devient un facteur limitant. Notez les différences de latence entre les offres de stockage et sélectionnez l’offre qui répond le mieux aux exigences de l’application.

Réseau

La plupart des configurations réseau locales utilisent des liens 10 Gbits/s. Dans Azure, la bande passante réseau est directement définie par la taille des machines virtuelles. Certaines bandes passantes réseau peuvent dépasser 40 Gbits/s. Veillez à sélectionner une taille qui dispose de suffisamment de bande passante pour vos besoins d’application. Dans la plupart des cas, le facteur de limitation est les limites de débit de la machine virtuelle ou du disque au lieu du réseau.

Mémoire

Sélectionnez une taille de machine virtuelle qui dispose de suffisamment de RAM pour ce qui est actuellement configuré.

Diagnostics de performances (PerfInsights)

PerfInsights est l’outil recommandé par le support Azure pour les problèmes de performances des machines virtuelles. Il est conçu pour couvrir les meilleures pratiques et les onglets d’analyse dédiés pour le processeur, la mémoire et les E/S. Vous pouvez l’exécuter à la demande via le Portail Azure ou à partir de la machine virtuelle, puis partager les données avec l’équipe support Azure.

Exécuter PerfInsights

PerfInsights est disponible sous les systèmes d’exploitation Windows et Linux. Vérifiez que votre distribution Linux figure dans la liste des distributions prises en charge pour Diagnostics de performances pour Linux.

Exécuter et analyser des rapports via le Portail Azure

Lorsque PerfInsights est installé via le Portail Azure, le logiciel installe une extension sur la machine virtuelle. Les utilisateurs peuvent également installer PerfInsights en tant qu’extension en accédant directement au panneau Extensions dans la machine virtuelle, puis en sélectionnant une option de diagnostics des performances.

option Portail Azure 1

Parcourez le panneau de la machine virtuelle et sélectionnez l’option Performances diagnostics. Vous êtes invité à installer l’option (utilise des extensions) sur la machine virtuelle pour laquelle vous l’avez sélectionnée.

Capture d’écran montrant l’écran rapports diagnostics de performances et demandant à l’utilisateur d’installer Performance diagnostics.

option Portail Azure 2

Accédez à l’onglet Diagnostiquer et résoudre les problèmes dans le panneau de la machine virtuelle, puis recherchez le lien Résoudre les problèmes sous Problèmes de performances de machine virtuelle.

Capture d’écran montrant l’onglet Diagnostiquer et résoudre les problèmes dans le panneau de la machine virtuelle et le lien Résoudre les problèmes sous Problèmes de performances de machine virtuelle.

Éléments à rechercher dans le rapport PerfInsights

Après avoir exécuté le rapport PerfInsights, l’emplacement du contenu varie selon que le rapport a été exécuté via le Portail Azure ou en tant qu’exécutable. Pour l’une ou l’autre option, accédez au dossier de journal généré ou (si dans le Portail Azure) téléchargez localement pour analyse.

Exécuter via le portail Azure

Capture d’écran montrant l’écran rapports diagnostics de performances et mettant en surbrillance le rapport de diagnostics généré.

Ouvrez le rapport PerfInsights. L’onglet Résultats enregistre toute valeur aberrante en termes de consommation de ressources. S’il existe des instances de performances lentes en raison d’une utilisation spécifique des ressources, l’onglet Résultats classe chaque résultat comme impact élevé ou impact moyen .

Par exemple, dans le rapport suivant, nous constatons que des résultats d’impact moyen liés au stockage ont été détectés et que nous voyons les recommandations correspondantes. Si vous développez l’événement Findings , vous voyez plusieurs détails clés.

Capture d’écran montrant le rapport PerfInsights et détaille les résultats du rapport, notamment le niveau d’impact, la recherche, les ressources impactées et les recommandations.

Pour plus d’informations sur PerfInsights dans le système d’exploitation Linux, consultez Comment utiliser PerfInsights Linux dans Microsoft Azure.

Plus d’informations

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.