Raccogliere le metriche delle prestazioni per una macchina virtuale Linux
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:
Red Hat:
SUSE:
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
:
-
-P
: indica il processore per visualizzare le statistiche e l'argomentoALL
indica che devono essere visualizzate statistiche di tutte le CPU online nel sistema. -
1
: il primo argomento numerico specifica l'intervallo (in secondi) in cuimpstat
aggiornare e visualizzare nuove statistiche. -
2
: il secondo argomento numerico specifica il numero di voltempstat
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'identificatoreall
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
:
-
-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. Con5
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.
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 1
intervalli , 5
e 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 1m
intervalli , 5m
e 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
:
-
-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 used
total
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
:
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
:
-
-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/s
Cercare ,w/s
(IOPS),rMB/s
ewMB/s
e 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 dimpstat
. - 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
:
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:
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), %wait
e 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
:
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
:
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:
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:
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.sh
e 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.