Hur man använder vmstat-kommandot på Linux

Din Linux- eller macOS-dator använder virtuellt minne. Upptäck hur det påverkar ditt systems användning av fysiskt minne, CPU och hårddiskresurser.

Vad är virtuellt minne?

Din dator är utrustad med en begränsad mängd fysiskt minne som kallas random access minne (BAGGE). Detta RAM-minne måste hanteras av kärnan och delas mellan operativsystemet och vilka applikationer som helst som körs. Om dessa kombinerade krav kräver mer minne än vad som är fysiskt installerat i din dator, vad kan kärnan göra?

Linux och Unix-liknande operativsystem som macOS kan använda utrymme på din hårddisk för att hjälpa dem att hantera minnesbehov. Ett reserverat område med hårddiskutrymme som kallas ”swap space” kan användas som om det vore en förlängning av RAM. Detta är virtuellt minne.

Linux-kärnan kan skriva innehållet i ett minnesblock till swap-utrymme och frigöra den delen av RAM-minnet för användning av en annan process. Det utbytta minnet – även kallat ”utväxlat” – minne kan hämtas från bytesutrymmet och återställas till RAM när det behövs.

Naturligtvis är åtkomsthastigheten för utsökt minne långsammare än för minnet i RAM. Och det är inte den enda avvägningen. Även om virtuellt minne ger Linux ett sätt att hantera sina minneskrav, innebär användningen av virtuellt minne ökade bördor på andra ställen på datorn.

Din hårddisk måste utföra fler läsningar och skrivningar. Kärnan – och därmed processorn – måste göra mer arbete eftersom den byter ut minnet, byter in minnet och håller alla plattor igång för att tillfredsställa minnesbehoven för de olika processerna.

Linux erbjuder ett sätt för dig att övervaka all denna aktivitet i form av kommandot vmstat, som rapporterar om statistik för virtuellt minne.

Kommandot vmstat

Om du skriver vmstat som ett kommando utan parametrar kommer det att visa dig en uppsättning värden. Dessa värden är medelvärdena för varje statistik sedan din dator senast startade om. Dessa siffror är inte en ögonblicksbild av värdena ”just nu.”

vmstat

En kort tabell med värden visas.

Det finns kolumner med rubrikerna Procs, Memory, Swap, IO, System och CPU. Den sista kolumnen (kolumnen längst till höger) innehåller data som rör CPU:n.

Här är en lista över dataposterna i varje kolumn.

Proc

r: Antalet körbara processer. Dessa är processer som har startats och antingen körs eller väntar på nästa tidsdelade skur av CPU-cykler.
b: Antalet processer i oavbruten sömn. Processen är inte vilande, den utför ett blockerande systemanrop och den kan inte avbrytas förrän den har slutfört sin nuvarande åtgärd. Vanligtvis är processen en drivrutin som väntar på att någon resurs ska bli fri. Eventuella köade avbrott för den processen hanteras när processen återupptar sin vanliga aktivitet.

Minne

swpd: mängden virtuellt minne som används. Med andra ord, hur mycket minne har bytts ut.,
ledigt: mängden ledigt (för närvarande oanvänt) minne.
buff: mängden minne som används som buffertar.
cache: mängden minne som används som cache.

Byta

si: Mängden virtuellt minne som bytts in från swap-utrymme.
så: Mängden virtuellt minne byts ut för att byta utrymme.

IO

bi: Blockerar mottagna från en blockeringsenhet. Antalet datablock som används för att byta tillbaka virtuellt minne till RAM.
bo: Block som skickas till en blockeringsenhet. Antalet datablock som används för att byta virtuellt minne från RAM och till swap-utrymme.

Systemet

in: Antalet avbrott per sekund, inklusive klockan.
cs: Antalet kontextväxlar per sekund. En kontextväxling är när kärnan byter från systemlägesbehandling till användarlägesbehandling.

CPU

Dessa värden är alla procent av den totala CPU-tiden.

us: Tid som ägnas åt att köra icke-kärnkod. Det vill säga hur mycket tid som läggs på användarens tidsbearbetning och i trevlig tidsbearbetning.
sy: Tid som ägnas åt att köra kärnkod.
id: Tid tillbringad inaktiv.
wa: Tid för att vänta på input eller output.
st: Tid stulen från en virtuell maskin. Detta är den tid som en virtuell maskin måste vänta på att hypervisorn ska slutföra service på andra virtuella maskiner innan den kan komma tillbaka och sköta denna virtuella maskin.

Använda ett tidsintervall

Vi kan låta vmstat tillhandahålla regelbundna uppdateringar av dessa siffror genom att använda ett fördröjningsvärde. Fördröjningsvärdet anges i sekunder. För att få statistiken uppdaterad var femte sekund skulle vi använda följande kommando:

vmstat 5

Var femte sekund lägger vmstat till ytterligare en rad data till tabellen. Du måste trycka på Ctrl+C för att stoppa detta.

Använda ett räknevärde

Om du använder ett för lågt fördröjningsvärde kommer ditt system att belastas ytterligare. Om du behöver ha snabba uppdateringar för att försöka diagnostisera ett problem, rekommenderas att du använder ett räknevärde samt ett fördröjningsvärde.

Räknevärdet talar om för vmstat hur många uppdateringar som ska utföras innan det avslutas och returnerar dig till kommandotolken. Om du inte anger ett räknevärde kommer vmstat att köras tills det stoppas av Ctrl+C.

För att få vmstat att tillhandahålla en uppdatering var femte sekund – men bara för fyra uppdateringar – använd följande kommando:

vmstat 5 4

Efter fyra uppdateringar stannar vmstat av sig själv.

Byte av enheter

Du kan välja att visa minnes- och växlingsstatistiken i kilobyte eller megabyte med alternativet -S (enhetstecken). Detta måste följas av en av k , K , m eller M. Dessa representerar:

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

För att få statistiken uppdaterad var tionde sekund med minnes- och växlingsstatistiken visas i megabyte, använd följande kommando:

vmstat 10 -S M

Minnes- och bytesstatistiken visas nu i megabyte. Observera att alternativet -S inte påverkar IO-blockstatistiken. Dessa visas alltid i block.

Aktivt och inaktivt minne

Om du använder alternativet -a (active) ersätts buff- och cache-minneskolumnerna med kolumnerna ”inakt” och ”aktiv”. Som de föreslår visar dessa mängden inaktivt och aktivt minne.

Om du vill se dessa två kolumner istället för kolumnerna buff och cache, inkluderar du alternativet -a, som visas:

vmstat 5 -a -S M

De inakta och aktiva kolumnerna påverkas av alternativet -S (enhetstecken).

Gafflar

Omkopplaren -f visar antalet gafflar som har hänt sedan datorn startades upp.

Med andra ord visar detta antalet uppgifter som har lanserats (och, för huvuddelen av dem, stängt igen) sedan systemet startades. Varje process som startas från kommandoraden skulle öka denna siffra. Varje gång en uppgift eller process skapar eller klonar en ny uppgift kommer denna siffra att öka.

vmstat -f

Gaffeldisplayen uppdateras inte.

Visar Slabinfo

Kärnan har sin egen minneshantering att oroa sig för liksom minneshanteringen för operativsystemet och alla applikationer.

Som du kanske föreställer dig allokerar och avallokerar kärnan minne om och om igen för de många olika typerna av dataobjekt som den måste hantera. För att göra detta så effektivt som möjligt använder den ett system som kallas plattor. Detta är en form av cachning.

Minne som allokerats, används och inte längre krävs för en specifik typ av kärndataobjekt kan återanvändas för ett annat dataobjekt av samma typ utan att minnet deallokeras och omallokeras. Tänk på skivor som förtilldelade, måttbeställda segment av RAM-minne för kärnans egna behov.

För att se statistiken för plattorna, använd alternativet -m (plattor). Du måste använda sudo och du kommer att bli ombedd att ange ditt lösenord. Eftersom utgången kan vara ganska lång är vi mindre.

sudo vmstat -m | less

Utgången har fem kolumner. Dessa är:

Cache: Namnet på cachen.
num: Antalet aktiva objekt i denna cache.
total: Det totala antalet tillgängliga objekt i denna cache.
storlek: Storleken på varje objekt i cachen.
sidor: Det totala antalet minnessidor som har (minst) ett objekt för närvarande associerat med denna cache.

Tryck på q för att lämna mindre.

Visar händelseräknare och minnesstatistik

För att visa en sida med händelseräknare och minnesstatistik, använd alternativet -s (stats). Observera att det är ett gement ”s”.

vmstat -s

Även om statistiken som rapporteras i stort sett är densamma som informationen som utgör standardutdata för vmstat, är en del av dem uppdelade i mer detalj.

Till exempel kombinerar standardutgången både den trevliga och den icke-trevliga CPU-tiden för användaren i kolumnen ”oss”. Displayen -s (statistik) listar denna statistik separat.

Visar diskstatistik

Du kan få en liknande lista över diskstatistik med alternativet -d (disk).

vmstat -d | less

För varje disk visas tre kolumner, dessa är Reads, Writes och IO.

IO är kolumnen längst till höger. Observera att sek-kolumnen i IO mäts i sekunder men den tidsbaserade statistiken i läs- och skrivkolumnerna mäts i millisekunder.

Detta är vad kolumnerna betyder:

Läser

total: Det totala antalet diskläsningar.
sammanslagna: Det totala antalet grupperade läsningar.
sektorer: Det totala antalet sektorer som har lästs in.
ms: Totalt antal tid i millisekunder som användes för att läsa data från disken.

skriver

total: Det totala antalet diskskrivningar.
sammanslagna: Det totala antalet grupperade skrivningar.
sektorer: Det totala antalet sektorer som skrivits till.
ms = Totalt antal tid i millisekunder som användes för att skriva data till disken.

IO

cur: Antal aktuella skivläsningar eller skrivningar.
sek: Tid i sekunder för pågående läsning eller skrivning.

Visar sammanfattning av diskstatistik

För att se en snabb visning av sammanfattande statistik för din diskaktivitet, använd alternativet -D (disksumma). Lägg märke till det stora ”D”.

vmstat -D

Antalet diskar kan se onormalt högt ut. Datorn som används för att undersöka den här artikeln kör Ubuntu. Med Ubuntu, varje gång du installerar en applikation från en Snap, skapas ett squashfs pseudo-filsystem som är kopplat till en /dev/loop-enhet.

Irriterande nog räknas dessa enhetsposter som hårddiskenheter av många av Linux-kommandon och verktyg.

Visar partitionsstatistik

För att se statistik relaterad till en specifik partition, använd alternativet -p (partition) och ange partitionsidentifieraren som en kommandoradsparameter.

Här ska vi titta på partitionen sda1. Siffran ett indikerar att detta är den första partitionen på enheten sda, som är den här datorns huvudhårddisk.

vmstat -p sda1

Informationen som returneras visar det totala antalet diskläsningar och diskskrivningar till och från den partitionen, och antalet sektorer som ingår i diskläs- och diskskrivningsåtgärder.

En titt under huven

Det är alltid bra att veta hur man lyfter på huven och se vad som händer under. Ibland kommer du att försöka lösa problem, ibland kommer det att vara av intresse för att du vill veta hur din dator tickar.

vmstat kan ge dig massor av användbar information. Nu vet du hur du kommer åt det och vad det betyder. Och förvarnat är förarbetat – när du behöver kavla upp ärmarna och göra lite diagnostik, vet du att du har vmstat på din sida.