Datorer som kör Linux eller macOS utnyttjar något som kallas virtuellt minne. Lär dig hur detta system påverkar datorns användning av det fysiska minnet, processorn och hårddisken.
Vad är virtuellt minne?
Din dator är utrustad med en begränsad mängd fysiskt minne, ofta kallat RAM (Random Access Memory). Det här RAM-minnet administreras av systemkärnan och delas mellan operativsystemet och de applikationer som körs. Om dessa kombinerade behov överstiger den mängd fysiskt minne som finns installerat i datorn, vad kan kärnan då göra?
Linux och Unix-baserade operativsystem, som macOS, kan använda utrymme på hårddisken för att hantera minneskraven. Ett specifikt reserverat område på hårddisken, känt som ”swap space”, kan användas som om det vore en utökning av RAM-minnet. Detta är vad som menas med virtuellt minne.
Linux-kärnan kan skriva innehållet i en minnesdel till ”swap space” och därmed frigöra det fysiska RAM-minnet för användning av andra processer. Det utbytta minnet – även benämnt ”swappat” minne – kan sedan hämtas från ”swap space” och återföras till RAM-minnet vid behov.
Det är dock en nackdel. Åtkomsthastigheten till minne i ”swap space” är betydligt långsammare än den i RAM. Användning av virtuellt minne medför också andra belastningar på datorn.
Hårddisken måste hantera fler läs- och skrivoperationer. Kärnan – och därmed processorn – får arbeta hårdare med att flytta minne fram och tillbaka, vilket ökar belastningen för att möta minnesbehoven för alla processer.
Linux erbjuder ett verktyg för att övervaka all denna aktivitet, nämligen kommandot vmstat, som ger information om statistik relaterad till virtuellt minne.
Kommandot vmstat
Om du kör vmstat utan några parametrar visas en tabell med värden. Dessa värden är genomsnitt för varje statistik sedan datorn senast startades om. Siffrorna representerar alltså inte värden ”just nu”.
vmstat
En kort tabell visas med kolumner som rubrikerats med ”Procs”, ”Memory”, ”Swap”, ”IO”, ”System” och ”CPU”. Den sista kolumnen (längst till höger) visar information relaterad till processorn (CPU).
Här följer en beskrivning av dataposterna i varje kolumn:
Proc
r: Antal processer som kan köras. Dessa är processer som är aktiva och som antingen körs eller väntar på sin nästa tidsdel av processorns cykler.
b: Antal processer i oavbruten sömn. Processen är inte vilande utan väntar på att ett systemanrop ska slutföras och kan inte avbrytas förrän den nuvarande åtgärden är klar. Ofta är processen en drivrutin som väntar på att en resurs ska bli tillgänglig. Eventuella avbrott som har köats för den processen hanteras när processen återupptar sin normala aktivitet.
Minne
swpd: Mängden virtuellt minne som används, alltså hur mycket minne som har ”swappats” ut.
free: Mängden ledigt (oanvänt) minne.
buff: Mängden minne som används som buffertar.
cache: Mängden minne som används som cache.
Swap
si: Mängden virtuellt minne som har ”swappats in” från ”swap space”.
so: Mängden virtuellt minne som har ”swappats ut” till ”swap space”.
IO
bi: Antalet datablock som tas emot från en enhet. Det handlar om datablock som används för att flytta tillbaka virtuellt minne till RAM.
bo: Antalet datablock som skickas till en enhet. Det handlar om datablock som används för att flytta virtuellt minne från RAM till ”swap space”.
System
in: Antalet avbrott per sekund, inklusive klockan.
cs: Antalet kontextväxlingar per sekund. En kontextväxling är när kärnan byter från systemläge till användarläge.
CPU
Dessa värden anges i procent av den totala CPU-tiden.
us: Tid som används för att köra kod som inte tillhör kärnan, dvs. tid som läggs på användarprocesser och ”nice time” processer.
sy: Tid som används för att köra kärnkod.
id: Tid som processorn är inaktiv.
wa: Tid som väntas på input eller output (I/O).
st: Tid som stulits från en virtuell maskin. Det är den tid som en virtuell maskin måste vänta på att hypervisorn ska slutföra service för andra virtuella maskiner innan den kan återgå till att hantera denna virtuella maskin.
Använda tidsintervall
Du kan låta vmstat uppdatera statistiken regelbundet genom att använda ett fördröjningsvärde, vilket anges i sekunder. För att få statistiken uppdaterad var femte sekund skulle kommandot se ut så här:
vmstat 5
Var femte sekund lägger vmstat till en ny rad med data till tabellen. Du måste trycka på Ctrl+C för att stoppa detta.
Använda ett räknevärde
För låga fördröjningsvärden kan öka belastningen på systemet. Om du behöver snabba uppdateringar för att felsöka ett problem rekommenderas att du även använder ett räknevärde.
Räknevärdet talar om för vmstat hur många uppdateringar som ska göras innan programmet avslutas och du återgår till kommandotolken. Om du inte anger ett räknevärde fortsätter vmstat att köras tills du stoppar det med Ctrl+C.
För att få vmstat att ge en uppdatering var femte sekund, men bara för fyra uppdateringar, skulle kommandot se ut så här:
vmstat 5 4
Efter fyra uppdateringar avslutas vmstat automatiskt.
Ändra enheter
Du kan välja att visa minnes- och swap-statistiken i kilobyte eller megabyte med alternativet `-S` (enhetsbeteckning). Detta måste följas av `k`, `K`, `m` eller `M`. Dessa står för:
k: | 1000 byte |
K: | 1024 byte |
m: | 1000000 byte |
M: | 1048576 byte |
För att få statistiken uppdaterad var tionde sekund med minnes- och swap-statistiken visad i megabyte skulle kommandot se ut så här:
vmstat 10 -S M
Minnes- och swap-statistiken visas nu i megabyte. Observera att alternativet `-S` inte påverkar I/O-blockstatistiken. Dessa visas alltid i block.
Aktivt och inaktivt minne
Om du använder alternativet `-a` (aktiv) ersätts kolumnerna ”buff” och ”cache” med kolumnerna ”inact” och ”active”. Dessa visar mängden inaktivt och aktivt minne.
Om du vill se dessa två kolumner istället för kolumnerna för buffert och cache inkluderar du alternativet `-a`, som visas här:
vmstat 5 -a -S M
De inaktiva och aktiva kolumnerna påverkas av alternativet `-S` (enhetsbeteckning).
Fork
Alternativet `-f` visar antalet ”forks” (processkloningar) som har skett sedan datorn startade.
Med andra ord visar detta antalet processer som har startats (och för de flesta, avslutats) sedan systemet startade. Varje process som startas från kommandoraden ökar denna siffra. Varje gång en process skapar en ny process ökar denna siffra.
vmstat -f
Fork-visningen uppdateras inte.
Visa Slabinfo
Kärnan har egen minneshantering att hantera, förutom minneshanteringen för operativsystemet och alla applikationer.
Som du kan föreställa dig allokerar och avallokerar kärnan minne upprepade gånger för de många olika typer av dataobjekt som den behöver hantera. För att göra detta så effektivt som möjligt använder den ett system som kallas ”slabs”. Det är en form av cachning.
Minne som har allokerats, använts och inte längre behövs för en specifik typ av dataobjekt i kärnan kan återanvändas för ett annat dataobjekt av samma typ utan att minnet avallokeras och sedan allokeras igen. Se ”slabs” som i förväg allokerade, storleksanpassade segment av RAM för kärnans egna behov.
För att visa statistiken för ”slabs”, använd alternativet `-m` (slabs). Du måste använda `sudo` och ange ditt lösenord. Eftersom utskriften kan vara ganska lång använder vi `less`.
sudo vmstat -m | less
Utskriften 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 `less`.
Visa 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 litet ”s”.
vmstat -s
Även om statistiken som visas i stort sett är densamma som standardutdata för vmstat, är en del av den uppdelad i mer detalj.
Till exempel kombinerar standardutskriften både användarens ”nice time” och icke-”nice time” i kolumnen ”us”. Skärmen `-s` (statistik) visar denna statistik separat.
Visa diskstatistik
Du kan få en liknande lista över diskstatistik med alternativet `-d` (disk).
vmstat -d | less
För varje disk visas tre kolumner: ”Reads”, ”Writes” och ”IO”.
IO är kolumnen längst till höger. Observera att ”sek”-kolumnen i ”IO” mäts i sekunder, medan den tidsbaserade statistiken i kolumnerna för läs- och skrivoperationer mäts i millisekunder.
Här är betydelsen av de olika kolumnerna:
Läser
total: Det totala antalet diskläsningar.
merged: Det totala antalet sammanfogade läsningar.
sectors: Det totala antalet sektorer som har lästs in.
ms: Totalt antal millisekunder som använts för att läsa data från disken.
Skriver
total: Det totala antalet diskskrivningar.
merged: Det totala antalet sammanfogade skrivningar.
sectors: Det totala antalet sektorer som skrivits.
ms: Totalt antal millisekunder som använts för att skriva data till disken.
IO
cur: Antalet pågående diskläsningar eller -skrivningar.
sek: Tid i sekunder för pågående läs- eller skrivoperationer.
Visa sammanfattning av diskstatistik
För att få en snabb översikt över sammanfattande statistik för din diskaktivitet, använd alternativet `-D` (disksumma). Observera det stora ”D”.
vmstat -D
Antalet diskar kan se onormalt högt ut. Datorn som användes för att ta fram den här artikeln kör Ubuntu. I Ubuntu, varje gång du installerar en applikation från Snap, skapas ett ”squashfs” pseudo-filsystem som är kopplat till en /dev/loop-enhet.
Dessa enheter räknas tyvärr som hårddiskenheter av många Linux-kommandon och verktyg.
Visa partitionsstatistik
För att se statistik som är 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`, vilket är datorns primära hårddisk.
vmstat -p sda1
Informationen som returneras visar det totala antalet diskläsningar och -skrivningar till och från den partitionen, och antalet sektorer som ingår i diskoperationerna.
En titt under huven
Det är alltid bra att veta hur man kan ”lyfta på huven” och se vad som händer inuti. Ibland gör du det för att lösa problem, ibland bara för att det är intressant att se hur din dator fungerar.
vmstat kan ge dig massor av användbar information. Nu vet du hur du kommer åt den och vad den betyder. Och att vara förvarnad är att vara förberedd – när du behöver kavla upp ärmarna och diagnostisera något, vet du att du har vmstat på din sida.