Condividi tramite


Raccogliere le metriche delle prestazioni per una macchina virtuale Linux

Distribuzione in Azure

Si applica a: ✔️ macchine virtuali Linux

Questo articolo descrive come recuperare le metriche delle prestazioni da una macchina virtuale Linux in Microsoft Azure usando le utilità Sysstat (strumenti di monitoraggio delle prestazioni). Fornisce esempi di come usare queste utilità e leggere i relativi output.

Sono disponibili diversi comandi per la raccolta di contatori delle prestazioni in Linux. I comandi come vmstat e uptime forniscono metriche di sistema essenziali, ad esempio l'utilizzo della CPU, la memoria di sistema e il carico di sistema. La maggior parte di questi comandi è preinstallata per impostazione predefinita, mentre altri possono essere facilmente accessibili dai repository predefiniti.

In base al tipo di metriche, questi comandi possono essere classificati in:

Installare le utilità Sysstat per Linux

È possibile installare le utilità Sysstat in una macchina virtuale Linux usando un comando Bash o la funzionalità Esegui comando tramite l'interfaccia della riga di comando di Azure. Se si usano i comandi dell'interfaccia della riga di comando di Azure forniti in questo articolo, assicurarsi che siano impostate le due variabili di ambiente seguenti. È necessario sostituire il nome del gruppo di risorse e il nome della macchina virtuale con i valori effettivi.

export MY_RESOURCE_GROUP_NAME="yourResourceGroup"
export MY_VM_NAME="yourVM"

Note

Alcuni dei comandi seguenti richiedono privilegi radice.

Per installare il sysstat pacchetto in una macchina virtuale Linux, usare il comando seguente:

Ubuntu:

sudo apt install sysstat -y

Red Hat:

sudo dnf install sysstat -y

SUSE:

sudo zypper install sysstat --non-interactive

CPU

mpstat

Il mpstat comando fa parte del sysstat pacchetto. Visualizza l'utilizzo della CPU e la media di ogni CPU, utile per identificare l'utilizzo della CPU. Il mpstat comando fornisce una panoramica dell'utilizzo della CPU delle CPU disponibili, consentendo di identificare il bilanciamento dell'utilizzo e se è in overload una singola CPU.

Ecco un esempio di come eseguire mpstat:

mpstat -P ALL 1 2
  • -P: indica il processore per visualizzare le statistiche e l'argomento ALL indica che devono essere visualizzate statistiche di tutte le CPU online nel sistema.
  • 1: il primo argomento numerico specifica l'intervallo (in secondi) in cui mpstat aggiornare e visualizzare nuove statistiche.
  • 2: il secondo argomento numerico specifica il numero di volte mpstat in cui devono essere visualizzate le statistiche. In questo caso, stampa due statistiche a un secondo intervallo.

È possibile aumentare il numero di volte in cui l'argomento supporta tempi di raccolta dati più lunghi. In genere, sono sufficienti tre o cinque secondi. Per i sistemi con un numero di core più elevato, riducendolo a due secondi può aiutare a gestire il volume di dati visualizzati.

Come leggere l'output mpstat

Ecco un esempio di output di 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

Ci sono diverse cose importanti da notare. La prima riga fornisce informazioni utili:

  • Kernel e versione: 5.14.0-362.8.1.el9_3.x86_64
  • Nome host: alma9
  • Dattero: 02/21/24
  • Architettura: _x86_64_
  • Numero totale di CPU (queste informazioni sono utili per interpretare l'output di altri comandi): (8 CPU)

Vengono quindi visualizzate le metriche per le CPU. Ecco una spiegazione di ogni colonna:

  • Time: timestamp che indica quando è stato raccolto l'esempio.
  • CPU: identificatore numerico per la CPU. L'identificatore all rappresenta una media per tutte le CPU.
  • %usr: percentuale di utilizzo della CPU da parte di processi dello spazio utente, in genere applicazioni utente.
  • %nice: percentuale di utilizzo della CPU da parte dello spazio utente elabora con un valore bello (priorità).
  • %sys: percentuale di utilizzo della CPU da parte dei processi dello spazio del kernel.
  • %iowait: percentuale di tempo di inattività della CPU in attesa di operazioni di I/O in sospeso.
  • %irq: percentuale di interruzioni hardware di manutenzione del tempo di CPU.
  • %soft: percentuale di interruzioni del software di manutenzione trascorse per la CPU.
  • %steal: percentuale di tempo di CPU impiegato da una macchina virtuale per la gestione di altre macchine virtuali (non applicabile ad Azure a causa della mancanza di overprovisioning della CPU).
  • %guest: percentuale di tempo della CPU impiegato da una CPU virtuale per la gestione delle macchine virtuali (non applicabile ad Azure, rilevante solo per i sistemi bare metal che eseguono macchine virtuali).
  • %gnice: percentuale di tempo della CPU per una CPU virtuale con un buon valore impiegato per gestire le macchine virtuali (non applicabile ad Azure, ma solo per i sistemi bare metal che eseguono macchine virtuali).
  • %idle: percentuale di tempo cpu inattivo e non in attesa di richieste di I/O.

Considerazioni essenziali

Considerazioni chiave quando si esamina l'output di mpstat:

  • Verificare che tutte le CPU siano caricate correttamente e non una singola CPU gestisca tutto il carico. Queste informazioni potrebbero indicare un'applicazione a thread singolo.
  • Cercare un equilibrio integro tra %usr e %sys, come l'opposto indica più tempo impiegato per il carico di lavoro effettivo rispetto alla gestione dei processi del kernel.
  • %iowait Cercare percentuali, poiché i valori elevati potrebbero indicare un sistema in attesa costante delle richieste di I/O.
  • Un utilizzo elevato %soft potrebbe indicare un traffico di rete elevato.

vmstat

L'utilità vmstat è ampiamente disponibile nella maggior parte delle distribuzioni Linux. Offre una panoramica generale dell'utilizzo di CPU, memoria e I/O su disco in un singolo riquadro.

Ecco un esempio di come eseguire vmstat:

vmstat -w 1 5
  • -w: utilizzare la stampa estesa per mantenere le colonne coerenti.
  • 1: il primo argomento numerico specifica l'intervallo in secondi tra ogni report. In questo caso, vmstat restituirà un report ogni secondo.
  • 5: il secondo argomento numerico specifica il numero di report che vmstat deve generare. Con 5 specificato qui, vmstat genererà un totale di cinque report.

Come leggere l'output vmstat

Ecco un esempio di output di 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

L'output è suddiviso in categorie nei sei gruppi seguenti. L'output mostra le statistiche complessive per l'intero sistema, ovvero tutte le CPU e i dispositivi in blocchi aggregati.

  • procs: statistiche per i processi.
  • memory: statistiche per la memoria di sistema.
  • swap: statistiche per lo scambio.
  • io: statistiche per l'I/O del disco.
  • system: statistiche per cambi di contesto e interrupt.
  • cpu: statistiche per l'utilizzo della CPU.

procs

La sezione procs include due colonne:

  • r: numero di processi eseguibili nella coda di esecuzione.
  • b: numero di processi bloccati in attesa di I/O.

Questa sezione mostra immediatamente se è presente un collo di bottiglia nel sistema. Numeri elevati in entrambe le colonne indicano processi di accodamento e attesa di risorse.

La r colonna indica il numero di processi in attesa dell'esecuzione del tempo di CPU. Un modo semplice per interpretare questo numero è il seguente: se il numero di processi nella r coda è superiore al numero totale di CPU, è possibile dedurre che la CPU del sistema è troppo caricata per allocare tempo CPU per tutti i processi in attesa di esecuzione.

La b colonna indica il numero di processi in attesa di esecuzione e bloccati dalle richieste di I/O. Un numero elevato in questa colonna indica un sistema che riscontra un numero elevato di operazioni di I/O e i processi non possono essere eseguiti a causa di altri processi in attesa del completamento delle richieste di I/O. Ciò potrebbe anche indicare una latenza elevata del disco.

memory

La sezione memory contiene quattro colonne. I valori vengono visualizzati in byte. Questa sezione offre una panoramica generale dell'utilizzo della memoria.

  • swpd: quantità di memoria di scambio usata.
  • free: quantità di memoria libera.
  • buff: quantità di memoria usata per i buffer.
  • cache: quantità di memoria usata per la cache.

swap

La sezione swap include due colonne:

  • si: quantità di memoria scambiata in (spostata dalla memoria di sistema allo scambio) al secondo.
  • so: quantità di memoria scambiata (spostata dallo scambio alla memoria di sistema) al secondo.

Se si osserva un valore elevato si , potrebbe rappresentare un sistema che esaurisce la memoria di sistema e sposta le pagine da scambiare (scambio).

Io

La sezione io contiene due colonne. Questi valori sono in blocchi al secondo.

  • bi: numero di blocchi ricevuti da un dispositivo a blocchi (legge blocchi al secondo) al secondo.
  • bo: numero di blocchi inviati a un dispositivo a blocchi (scritture al secondo) al secondo.

system

La sezione di sistema ha due colonne:

  • in: numero di interrupt al secondo.
  • cs: numero di cambi di contesto al secondo.

Un numero elevato di interrupt al secondo potrebbe indicare un sistema occupato con i dispositivi hardware (ad esempio le operazioni di rete).

Un numero elevato di commutatori di contesto potrebbe indicare un sistema occupato con molti processi a esecuzione breve. Non c'è un numero buono o cattivo qui.

cpu

La cpu sezione contiene cinque colonne:

  • us: percentuale di utilizzo dello spazio utente.
  • sy: percentuale di utilizzo del sistema (spazio kernel).
  • id: percentuale di utilizzo del tempo di inattività della CPU.
  • wa: percentuale di utilizzo del tempo di inattività della CPU in attesa dei processi con I/O.
  • st: percentuale di utilizzo del tempo di CPU dedicato alla gestione di altre CPU virtuali (non applicabile ad Azure).

I valori vengono presentati in percentuali. Questi valori sono uguali a quelli presentati dall'utilità mpstat e forniscono una panoramica generale dell'utilizzo della CPU. Seguire un processo simile a mpstat durante la revisione di questi valori.

Uptime

L'utilità uptime offre una panoramica generale del carico di sistema con i valori medi di carico.

uptime

Come leggere l'output del tempo di attività

Ecco un esempio di output di uptime:

16:55:53 up 9 min,  2 users,  load average: 9.26, 2.91, 1.18

L'oggetto load average visualizza tre numeri. Questi numeri corrispondono al carico di sistema in 1intervalli , 5e 15 minuti.

Per interpretare questi valori, è importante conoscere il numero di CPU disponibili nel sistema, ottenute dall'output precedente mpstat . Il valore dipende dal numero totale di CPU, quindi l'uso dell'output mpstat come esempio, il sistema ha otto CPU e una media di carico di 8 significa che tutti i core vengono caricati al 100%.

Un valore indica 4 che la metà delle CPU viene caricata al 100% (o un carico totale del 50% per tutte le CPU). Nell'output precedente, la media del carico è 9.26, il che significa che la CPU viene caricata a circa il 115%.

Gli 1mintervalli , 5me 15m consentono di identificare se il carico aumenta o diminuisce nel tempo.

Inoltre, il nproc comando può essere usato per recuperare il numero di CPU.

Memoria

Per la memoria, due comandi possono recuperare i dettagli di utilizzo della memoria.

free

Il free comando mostra l'utilizzo della memoria di sistema.

Ecco un esempio di come eseguire free:

free -h
  • -h: questa opzione specifica il formato di output da rendere leggibile. Converte le dimensioni della memoria da byte a un formato più leggibile (kilobyte, megabyte e gigabyte) e aggiunge etichette di unità appropriate (KB, MB e GB).

Come leggere l'output libero

Ecco un esempio di output di free:

               total        used        free      shared  buff/cache   available
Mem:            31Gi        19Gi        12Gi        23Mi        87Mi        11Gi
Swap:           23Gi          0B        23Gi

Dall'output osservare la total memoria di sistema rispetto alla available memoria e allo usedtotal scambio. La memoria disponibile considera la memoria allocata alla cache, che può essere restituita alle applicazioni utente. Alcuni utilizzi di scambio sono normali nei kernel moderni, perché alcune pagine di memoria usate raramente possono essere spostate per lo scambio.

swapon

Il swapon comando visualizza dove viene configurato lo scambio e le rispettive priorità dei dispositivi o dei file di scambio.

Ecco un esempio di come eseguire swapon:

swapon -s

Ecco un esempio di output di swapon:

Filename      Type          Size          Used   Priority
/dev/zram0    partition     16G           0B      100
/mnt/swapfile file          8G            0B      -2

Queste informazioni sono importanti per verificare se lo scambio è configurato in una posizione non ideale, ad esempio in un disco dati o del sistema operativo. Nel frame di riferimento di Azure, lo scambio deve essere configurato nell'unità temporanea perché offre prestazioni ottimali.

Considerazioni essenziali

  • Tenere presente che la memoria è una risorsa limitata. Una volta esaurita la memoria di sistema (RAM) e lo scambio, l'assassino OOM ucciderà i processi.
  • Verificare che lo scambio non sia configurato in un disco dati o in un disco del sistema operativo, in quanto ciò può causare problemi di I/O a causa di differenze di latenza. Lo scambio deve essere configurato nell'unità temporanea.
  • Si noti anche che è comune vedere i valori liberi vicini a zero nell'output free -h . Questo comportamento è dovuto alla cache delle pagine; il kernel rilascia tali pagine in base alle esigenze.

I/O

L'I/O del disco è una delle aree in cui Azure è più limitazione, perché le latenze ai dischi possono raggiungere 100ms+. I comandi seguenti consentono di identificare questi scenari.

iostat

L'utilità iostat fa parte del sysstat pacchetto. Visualizza le statistiche di utilizzo per ogni dispositivo a blocchi e consente di identificare i problemi di prestazioni correlati ai blocchi. Fornisce informazioni dettagliate sulle metriche, ad esempio velocità effettiva, latenza e dimensioni della coda. Queste metriche consentono di comprendere se l'I/O del disco diventa un fattore di limitazione.

Ecco un esempio di come eseguire iostat:

iostat -dxtm 1 5
  • -d: report sull'utilizzo per ogni dispositivo.
  • -x: statistiche estese.
  • -t: visualizza il timestamp per ogni report.
  • -m: visualizza in MB/s.
  • 1: il primo argomento numerico indica la frequenza con cui aggiornare la visualizzazione in secondi.
  • 2: il secondo argomento numerico indica quante volte i dati vengono aggiornati.

Come leggere l'output iostat

Ecco un esempio di output di 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

L'output include diverse colonne che non sono importanti (colonne aggiuntive a causa dell'opzione -x ). Alcuni dei più importanti sono:

  • r/s: operazioni di lettura al secondo (IOPS).
  • rMB/s: lettura di megabyte al secondo.
  • r_await: latenza di lettura in millisecondi.
  • rareq-sz: dimensione media delle richieste di lettura in kilobyte.
  • w/s: operazioni di scrittura al secondo (IOPS).
  • wMB/s: scrittura di megabyte al secondo.
  • w_await: latenza di scrittura in millisecondi.
  • wareq-size: dimensione media della richiesta di scrittura in kilobyte.
  • aqu-sz: dimensioni medie della coda.

Considerazioni essenziali

  • r/sCercare , w/s (IOPS), rMB/se wMB/se verificare che questi valori siano entro i limiti del disco specificato. Se i valori sono vicini o superiori ai limiti, il disco verrà limitato, causando una latenza elevata. Queste informazioni possono anche essere corroborate con la %iowait metrica di mpstat.
  • La latenza è una metrica eccellente per verificare se il disco viene eseguito come previsto. In genere, minore di 9ms è la latenza prevista per PremiumSSD. Altre offerte hanno obiettivi di latenza diversi.
  • Le dimensioni della coda sono un ottimo indicatore di saturazione. In genere, le richieste vengono servite quasi in tempo reale e il numero rimane vicino a uno (man mano che la coda non cresce mai). Un numero più elevato potrebbe indicare la saturazione del disco( ovvero le richieste di accodamento). Non esiste un numero valido o negativo per questa metrica. Comprendere che un numero maggiore di uno significa che le richieste stanno accodando aiuta a determinare se è presente una saturazione del disco.

lsblk

L'utilità lsblk mostra i dispositivi in blocchi collegati al sistema. Anche se non fornisce metriche sulle prestazioni, consente una rapida panoramica del modo in cui questi dispositivi sono configurati e quali punti di montaggio vengono usati.

Ecco un esempio di come eseguire lsblk:

lsblk

Come leggere l'output lsblk

Ecco un esempio di output di 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]

Considerazioni essenziali

  • Cercare dove vengono montati i dispositivi.
  • Verificare che lo scambio non sia configurato all'interno di un disco dati o di un disco del sistema operativo, se abilitato.
  • Un modo semplice per correlare un dispositivo a blocchi a un LUN in Azure consiste nell'eseguire ls -lr /dev/disk/azure.

Processo

La raccolta dei dettagli in base al processo consente di comprendere da dove proviene il carico di sistema. L'utilità principale per raccogliere statistiche sui processi è pidstat, perché fornisce informazioni dettagliate sulle statistiche cpu, memoria e I/O per ogni processo. Infine, un semplice ps ordinamento del processo in base all'utilizzo superiore della CPU e della memoria completa le metriche.

Note

Questi comandi richiedono privilegi radice usando sudo per visualizzare i dettagli di tutti i processi in esecuzione, non solo quelli dell'utente corrente.

pidstat

L'utilità pidstat fa anche parte del sysstat pacchetto. È simile mpstat o iostat in quanto visualizza le metriche per un determinato intervallo di tempo. Per impostazione predefinita, pidstat visualizza le metriche solo per i processi con attività.

Gli argomenti per pidstat sono uguali a per altre sysstat utilità:

  • 1: il primo argomento numerico indica la frequenza con cui aggiornare la visualizzazione in secondi.
  • 2: il secondo argomento numerico indica quante volte i dati vengono aggiornati.

Note

L'output può aumentare notevolmente se sono presenti molti processi con attività.

Elaborare le statistiche della CPU

Per raccogliere le statistiche della CPU del processo, eseguire pidstat senza opzioni:

pidstat 1 2
Come leggere l'output delle statistiche della CPU

Ecco un esempio di output di 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

Il comando visualizza l'utilizzo di %usr, %system( %guest non applicabile ad Azure), %waite l'utilizzo totale %CPU per ogni processo.

Considerazioni essenziali
  • Cercare processi con percentuali elevate %wait (iowait), in quanto potrebbe indicare processi bloccati in attesa di I/O, che potrebbero anche indicare la saturazione del disco.
  • Verificare che nessun singolo processo utilizza il 100% della CPU perché potrebbe indicare un'applicazione a thread singolo.

Elaborare le statistiche di memoria

Per raccogliere statistiche di memoria del processo, usare l'opzione -r :

pidstat -r 1 2
Come leggere l'output delle statistiche di memoria

Ecco un esempio di output di 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

Le metriche raccolte sono:

  • minflt/s: errori secondari al secondo. Questa metrica indica il numero di pagine caricate dalla memoria di sistema (RAM).
  • mjflt/s: errori principali al secondo. Questa metrica indica il numero di pagine caricate dal disco (SWAP).
  • VSZ: memoria virtuale usata in byte.
  • RSS: memoria residente usata (memoria allocata effettiva) in byte.
  • %MEM: percentuale di memoria totale usata.
  • Command: nome del processo.
Considerazioni essenziali
  • Cercare errori principali al secondo, in quanto questo valore indica un processo che scambia le pagine da o verso il disco. Questo comportamento potrebbe indicare l'esaurimento della memoria e causare OOM eventi o riduzione delle prestazioni a causa di uno scambio più lento.
  • Verificare che un singolo processo non consumi il 100% della memoria disponibile. Questo comportamento potrebbe indicare una perdita di memoria.

Suggerimento

L'opzione --human può essere usata per visualizzare i numeri in un formato leggibile, ovvero KB, MB e GB.

Elaborare le statistiche di I/O

Per raccogliere statistiche di I/O del processo, usare l'opzione -d :

pidstat -d 1 2

Ecco un esempio di output di 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

Le metriche raccolte sono:

  • kB_rd/s: lettura kilobyte al secondo.
  • kB_wr/s: kilobyte di scrittura al secondo.
  • Command: nome del processo.
Considerazioni essenziali
  • Cercare singoli processi con velocità di lettura/scrittura elevate al secondo. Queste informazioni sono indicazioni per i processi con I/O più che identificare i problemi.

Suggerimento

L'opzione --human può essere usata per visualizzare i numeri in un formato leggibile, ovvero KB, MB e GB.

Ps

Infine, il ps comando visualizza i processi di sistema e può essere ordinato in base alla CPU o alla memoria.

Per ordinare %CPU e ottenere i primi 10 processi:

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

Per ordinare %MEM e ottenere i primi 10 processi:

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

Consolidare i report

Lo script Bash seguente può raccogliere tutti i dettagli in una singola esecuzione e aggiungere l'output a un file per riferimento futuro:

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

Per eseguire, creare un file con il contenuto precedente, aggiungere execute le autorizzazioni eseguendo chmod +x gather.she quindi eseguire con sudo ./gather.sh.

Questo script salva l'output dei comandi in un file che si trova nella stessa directory in cui è stato richiamato lo script.

Inoltre, tutti i comandi nei codici di blocco Bash descritti in questo documento possono essere eseguiti tramite l'interfaccia della riga di comando di Azure usando l'estensione run-command e l'analisi dell'output jq per ottenere output simili all'esecuzione dei comandi in locale.

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'

Dichiarazione di non responsabilità sulle informazioni di terze parti

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.