Come utilizzare il comando vmstat su Linux

Il tuo computer Linux o macOS utilizza la memoria virtuale. Scopri in che modo influisce sull’utilizzo della memoria fisica, della CPU e del disco rigido da parte del tuo sistema.

Cos’è la memoria virtuale?

Il tuo computer è dotato di una quantità finita di memoria fisica chiamata memoria ad accesso casuale (RAM). Questa RAM deve essere gestita dal kernel e condivisa tra il sistema operativo e tutte le applicazioni in esecuzione. Se queste richieste combinate richiedono più memoria di quella fisicamente installata nel computer, cosa può fare il kernel?

I sistemi operativi Linux e Unix come macOS possono utilizzare lo spazio sul disco rigido per aiutarli a gestire le richieste di memoria. Un’area riservata dello spazio su disco rigido chiamata “spazio di swap” può essere utilizzata come se fosse un’estensione della RAM. Questa è la memoria virtuale.

Il kernel Linux può scrivere il contenuto di un blocco di memoria nello spazio di swap e liberare quella regione di RAM affinché possa essere utilizzata da un altro processo. La memoria sostituita, chiamata anche “paginata”, può essere recuperata dallo spazio di scambio e ripristinata nella RAM quando necessario.

Ovviamente, la velocità di accesso per la memoria paginata è più lenta di quella della memoria contenuta nella RAM. E questo non è l’unico compromesso. Sebbene la memoria virtuale fornisca a Linux un modo per gestire le sue richieste di memoria, l’uso della memoria virtuale pone maggiori oneri altrove sul computer.

Il tuo disco rigido deve eseguire più letture e scritture. Il kernel, e quindi la CPU, deve lavorare di più in quanto rimuove la memoria, inserisce la memoria e mantiene tutti i piatti in rotazione per soddisfare le esigenze di memoria dei diversi processi.

Linux fornisce un modo per monitorare tutta questa attività sotto forma del comando vmstat, che riporta statistiche sulla memoria virtuale.

Il comando vmstat

Se digiti vmstat come comando senza parametri, ti mostrerà un insieme di valori. Questi valori sono le medie per ciascuna delle statistiche dall’ultimo riavvio del computer. Queste cifre non sono un’istantanea dei valori “in questo momento”.

vmstat

vmstat in una finestra di terminale

Viene visualizzata una breve tabella di valori.

vmstat in una finestra di terminale

Ci sono colonne intitolate Procs, Memory, Swap, IO, System e CPU. L’ultima colonna (colonna più a destra) contiene i dati relativi alla CPU.

vmstat restituisce le colonne di destra in una finestra di terminale

Di seguito è riportato un elenco degli elementi di dati in ciascuna colonna.

Proc

r: il numero di processi eseguibili. Si tratta di processi che sono stati avviati e sono in esecuzione o in attesa del successivo burst di cicli della CPU suddiviso nel tempo.
b: il numero di processi in modalità di sospensione ininterrotta. Il processo non sta dormendo, sta eseguendo una chiamata di sistema di blocco e non può essere interrotto fino a quando non ha completato l’azione corrente. In genere il processo è un driver di dispositivo in attesa che alcune risorse vengano liberate. Qualsiasi interruzione in coda per quel processo viene gestita quando il processo riprende la sua normale attività.

  Come giocare ai giochi per Nintendo DS su Linux con MelonDS

Memoria

swpd: la quantità di memoria virtuale utilizzata. In altre parole, quanta memoria è stata sostituita.,
libero: la quantità di memoria inattiva (attualmente inutilizzata).
buff: la quantità di memoria utilizzata come buffer.
cache: la quantità di memoria utilizzata come cache.

Scambiare

si: quantità di memoria virtuale scambiata dallo spazio di swap.
quindi: quantità di memoria virtuale scambiata per lo spazio di swap.

IO

bi: blocchi ricevuti da un dispositivo a blocchi. Il numero di blocchi di dati utilizzati per scambiare di nuovo la memoria virtuale nella RAM.
bo: blocchi inviati a un dispositivo a blocchi. Il numero di blocchi di dati utilizzati per scambiare la memoria virtuale dalla RAM e nello spazio di swap.

Sistema

in: il numero di interruzioni al secondo, incluso l’orologio.
cs: il numero di cambi di contesto al secondo. Un cambio di contesto si verifica quando il kernel passa dall’elaborazione in modalità di sistema all’elaborazione in modalità utente.

processore

Questi valori sono tutte percentuali del tempo totale della CPU.

us: tempo impiegato per eseguire codice non kernel. Cioè, quanto tempo viene speso nell’elaborazione del tempo dell’utente e nell’elaborazione del tempo piacevole.
sy: tempo impiegato per eseguire il codice del kernel.
id: tempo trascorso inattivo.
wa: tempo trascorso in attesa di input o output.
st: Tempo rubato da una macchina virtuale. Questo è il tempo che una macchina virtuale deve attendere prima che l’hypervisor finisca di servire altre macchine virtuali prima di poter tornare e occuparsi di questa macchina virtuale.

Utilizzo di un intervallo di tempo

Possiamo fare in modo che vmstat fornisca aggiornamenti regolari a queste cifre utilizzando un valore di ritardo. Il valore del ritardo viene fornito in secondi. Per aggiornare le statistiche ogni cinque secondi, utilizzeremo il seguente comando:

vmstat 5

vmstat 5 in una finestra di terminale

Ogni cinque secondi vmstat aggiungerà un’altra riga di dati alla tabella. Dovrai premere Ctrl + C per fermarlo.

output da vmstat 5 in una finestra di terminale

Utilizzo di un valore di conteggio

L’uso di un valore di ritardo troppo basso metterà a dura prova il sistema. Se è necessario disporre di aggiornamenti rapidi per tentare di diagnosticare un problema, si consiglia di utilizzare un valore di conteggio e un valore di ritardo.

Il valore di conteggio indica a vmstat quanti aggiornamenti eseguire prima di uscire e di tornare al prompt dei comandi. Se non si fornisce un valore di conteggio, vmstat verrà eseguito fino a quando non viene arrestato da Ctrl + C.

Per fare in modo che vmstat fornisca un aggiornamento ogni cinque secondi, ma solo per quattro aggiornamenti, utilizzare il comando seguente:

vmstat 5 4

vmstat 5 4 in una finestra di terminale

Dopo quattro aggiornamenti, vmstat si interrompe spontaneamente.

  Come comprimere le immagini in Linux come per magia con E-mage

output da vmstat 5 4 in una finestra di terminale

Modifica delle unità

È possibile scegliere di visualizzare la memoria e le statistiche di scambio in kilobyte o megabyte utilizzando l’opzione -S (unità-carattere). Questo deve essere seguito da uno tra k, K, m o M. Questi rappresentano:

k: 1000 byte
K: 1024 byte
m: 1000000 byte
M: 1048576 byte

Per aggiornare le statistiche ogni 10 secondi con le statistiche di memoria e scambio visualizzate in megabyte, utilizzare il seguente comando:

vmstat 10 -S M

vmstat 10 -SM in una finestra di terminale

La memoria e le statistiche di scambio vengono ora visualizzate in megabyte. Notare che l’opzione -S non influisce sulle statistiche del blocco IO. Questi sono sempre visualizzati in blocchi.

output da vmstat 10 -SM in una finestra di terminale

Memoria attiva e inattiva

Se si utilizza l’opzione -a (attiva), le colonne buff e memoria cache vengono sostituite dalle colonne “inact” e “active”. Come suggeriscono, questi mostrano la quantità di memoria inattiva e attiva.

Per vedere queste due colonne invece delle colonne buff e cache, includi l’opzione -a, come mostrato:

vmstat 5 -a -S M

vmstat 5 -a -SM in una finestra di terminale

Le colonne inact e active sono influenzate dall’opzione -S (unità-carattere).

output da vmstat 5 -a -SM in una finestra di terminale

forchette

L’opzione -f mostra il numero di fork che si sono verificati dall’avvio del computer.

In altre parole, questo mostra il numero di attività che sono state avviate (e, per la maggior parte, chiuse di nuovo) da quando il sistema è stato avviato. Ogni processo avviato dalla riga di comando aumenterebbe questa cifra. Ogni volta che un’attività o un processo genera o clona una nuova attività, questa cifra aumenterà.

vmstat -f

vmstat -f in una finestra di terminale

Il display delle forche non si aggiorna.

Visualizzazione di Slabinfo

Il kernel ha la propria gestione della memoria di cui preoccuparsi, così come la gestione della memoria per il sistema operativo e tutte le applicazioni.

Come potete immaginare, il kernel sta allocando e deallocando la memoria più e più volte per i molti diversi tipi di oggetti dati che deve gestire. Per renderlo il più efficiente possibile, utilizza un sistema chiamato lastre. Questa è una forma di memorizzazione nella cache.

La memoria allocata, utilizzata e non più richiesta per un tipo specifico di oggetto dati del kernel può essere riutilizzata per un altro oggetto dati dello stesso tipo senza che la memoria venga deallocata e riallocata. Pensa alle lastre come segmenti di RAM pre-allocati, su misura, per le esigenze del kernel.

Per vedere le statistiche per le lastre, usa l’opzione -m (slabs). Dovrai usare sudo e ti verrà richiesta la password. Poiché l’output può essere piuttosto lungo, lo stiamo indirizzando di meno.

sudo vmstat -m | less

sudo vmstat -m |  meno in una finestra di terminale

L’output ha cinque colonne. Questi sono:

Cache: nome della cache.
num: il numero di oggetti attualmente attivi in ​​questa cache.
totale: il numero totale di oggetti disponibili in questa cache.
size: la dimensione di ogni oggetto nella cache.
pagine: il numero totale di pagine di memoria che hanno (almeno) un oggetto attualmente associato a questa cache.

  Come giocare ad Age of Empires IV su Linux

output da sudo vmstat -m |  meno in una finestra di terminale

Premere q per lasciare meno.

Visualizzazione dei contatori degli eventi e delle statistiche sulla memoria

Per visualizzare una pagina di contatori di eventi e statistiche sulla memoria, utilizzare l’opzione -s (stats). Nota che è una “s” minuscola.

vmstat -s

vmstat -s in una finestra di terminale

Sebbene le statistiche riportate siano in gran parte le stesse delle informazioni che compongono l’output vmstat predefinito, alcune di esse sono suddivise in modo più dettagliato.

Ad esempio, l’output predefinito combina nella colonna “us” sia il tempo di CPU utente piacevole che quello non piacevole. Il display -s (stats) elenca queste statistiche separatamente.

output da vmstat -s in una finestra terminale

Visualizzazione delle statistiche del disco

È possibile ottenere un elenco simile di statistiche del disco utilizzando l’opzione -d (disco).

vmstat -d | less

vmstat -d |  meno in una finestra di terminale

Per ogni disco vengono visualizzate tre colonne, queste sono letture, scritture e I / O.

output da vmstat -d |  meno in una finestra di terminale

IO è la colonna più a destra. Si noti che la colonna sec in IO viene misurata in secondi, ma le statistiche basate sul tempo nelle colonne di lettura e scrittura sono misurate in millisecondi.

output vmstat -d |  meno in una finestra di terminale

Questo è il significato delle colonne:

Legge

totale: il conteggio totale delle letture del disco.
unito: il conteggio totale delle letture raggruppate.
settori: il numero totale di settori che sono stati letti.
ms: conteggio totale del tempo in millisecondi utilizzato per leggere i dati dal disco.

scrive

total: il conteggio totale delle scritture su disco.
unito: il conteggio totale delle scritture raggruppate.
settori: il conteggio totale dei settori scritti.
ms = conteggio totale del tempo in millisecondi utilizzato per la scrittura dei dati sul disco.

IO

cur: numero di letture o scritture correnti del disco.
sec: tempo trascorso in secondi per qualsiasi lettura o scrittura in corso.

Visualizzazione delle statistiche di riepilogo del disco

Per visualizzare una rapida visualizzazione delle statistiche di riepilogo per l’attività del disco, utilizzare l’opzione -D (disk-sum). Nota la “D” maiuscola

vmstat -D

vmstat -D in una finestra di terminale

Il numero di dischi potrebbe sembrare insolitamente alto. Il computer utilizzato per la ricerca di questo articolo esegue Ubuntu. Con Ubuntu, ogni volta che installi un’applicazione da uno Snap, viene creato uno pseudo-filesystem squashfs che è collegato a un dispositivo / dev / loop.

Fastidiosamente queste voci di dispositivo vengono conteggiate come dispositivi di disco rigido da molti dei comandi e delle utilità di Linux.

output da vmstat -D in una finestra di terminale

Visualizzazione delle statistiche della partizione

Per visualizzare le statistiche relative a una partizione specifica, utilizzare l’opzione -p (partizione) e fornire l’identificatore della partizione come parametro della riga di comando.

Qui esamineremo la partizione sda1. La cifra uno indica che questa è la prima partizione sul dispositivo sda, che è il disco rigido principale per questo computer.

vmstat -p sda1

vmstat -p in una finestra di terminale

Le informazioni restituite mostrano il conteggio totale delle letture e delle scritture su disco in e da quella partizione e il numero di settori inclusi nelle azioni di lettura e scrittura su disco.

output da vmstat -p sda1 in una finestra di terminale

Una sbirciatina sotto il cofano

È sempre bello sapere come sollevare il cofano e vedere cosa sta succedendo sotto. A volte proverai a risolvere il problema, a volte sarà di interesse perché vuoi sapere come funziona il tuo computer.

vmstat può fornirti tantissime informazioni utili. Ora sai come accedervi e cosa significa. E l’avviso è salvato: quando hai bisogno di rimboccarti le maniche e fare un po ‘di diagnostica, saprai di avere vmstat dalla tua parte.