Jak používat příkaz vmstat v systému Linux

Operační systémy Linux a macOS využívají virtuální paměť. Tento článek vám pomůže pochopit, jak virtuální paměť ovlivňuje využití fyzické paměti, procesoru a diskových prostředků vašeho počítače.

Co je to virtuální paměť?

Každý počítač má omezené množství fyzické paměti, známé jako RAM (Random Access Memory). O tuto RAM se dělí operační systém a všechny spuštěné aplikace. Pokud celkové požadavky na paměť přesáhnou fyzickou kapacitu RAM, co se stane?

Systémy Linux a macOS a další systémy založené na Unixu mohou využít úložný prostor na pevném disku k dočasnému uložení dat, čímž se rozšíří dostupná paměť. Tato vyhrazená oblast na disku se nazývá „odkládací prostor“ a funguje jako rozšíření RAM. To je virtuální paměť.

Jádro systému Linux může dočasně přesunout (stránkovat) obsah bloku paměti do odkládacího prostoru a uvolnit tak RAM pro další procesy. V případě potřeby lze odložená data znovu načíst z odkládacího prostoru zpět do RAM.

Přístup k datům ve virtuální paměti je pomalejší než přístup k datům v RAM. Používání virtuální paměti také zvyšuje zatížení dalších částí počítače. Disk musí provádět více čtení a zápisů a procesor musí více pracovat s přesouváním dat a udržováním přehledu o všech procesech.

Linux nabízí nástroj vmstat, který poskytuje přehled statistik virtuální paměti a dalších systémových informací.

Použití příkazu vmstat

Příkaz vmstat bez parametrů zobrazí průměrné hodnoty od posledního restartu systému. Nejedná se tedy o aktuální snímek dat.

vmstat

Výstupem je tabulka s několika sloupci:

Sloupce jsou nazvány Process, Memory, Swap, IO, System a CPU. Data o využití CPU jsou umístěna v pravém sloupci.

Popis dat v jednotlivých sloupcích:

Proces

r: Počet spuštěných procesů. Tyto procesy aktivně běží nebo čekají na přidělení CPU.
b: Počet procesů v nepřerušitelném spánku. Proces je blokován čekáním na systémové volání a nelze ho přerušit.

Paměť

swpd: Využitá virtuální paměť (objem dat v odkládacím prostoru).
free: Množství volné RAM.
buff: Paměť využitá jako vyrovnávací paměť.
cache: Paměť využitá jako mezipaměť.

Výměna

si: Množství dat přesunutých z odkládacího prostoru do RAM.
so: Množství dat přesunutých z RAM do odkládacího prostoru.

IO

bi: Bloky dat načtené z blokového zařízení (disk).
bo: Bloky dat zapsané na blokové zařízení (disk).

Systém

in: Počet přerušení za sekundu, včetně přerušení časovače.
cs: Počet přepnutí kontextu za sekundu.

Procesor

Všechna následující data jsou v procentech celkového času CPU:

us: Čas strávený v uživatelském režimu (běh uživatelských aplikací).
sy: Čas strávený v režimu jádra.
id: Čas, kdy procesor nepracoval.
wa: Čas strávený čekáním na vstupně/výstupní operace.
st: Čas „ukradený“ virtuálnímu stroji hypervizorem.

Použití časového intervalu

Příkaz vmstat může poskytovat pravidelné aktualizace statistik. Číselný parametr udává interval (v sekundách) mezi jednotlivými aktualizacemi. Například:

vmstat 5

Každých 5 sekund vmstat přidá nový řádek s aktualizovanými statistikami. Pro ukončení výpisu stiskněte Ctrl+C.

Omezení počtu aktualizací

Příliš časté aktualizace mohou zatížit systém. Pro diagnostické účely je proto vhodné omezit počet aktualizací. Druhý číselný parametr příkazu vmstat určuje počet aktualizací před automatickým ukončením. Například:

vmstat 5 4

Příkaz vmstat se automaticky ukončí po čtyřech aktualizacích.

Změna jednotek

Pomocí parametru -S lze změnit jednotky pro zobrazení paměti a odkládacího prostoru na kilobajty (k, K) nebo megabajty (m, M). Jednotky jsou:

k: 1000 bajtů
K: 1024 bajtů
m: 1 000 000 bajtů
M: 1048576 bajtů

Například, pro zobrazení v megabajtech s 10 sekundovým intervalem použijte:

vmstat 10 -S M

V tomto výstupu jsou velikosti paměti a odkládacího prostoru zobrazeny v megabajtech. Parametr -S neovlivňuje jednotky pro zobrazení IO operací, které jsou vždy v blocích.

Aktivní a neaktivní paměť

Parametr -a nahradí sloupce „buff“ a „cache“ sloupci „inact“ a „active“, které zobrazují množství neaktivní a aktivní paměti.

Například:

vmstat 5 -a -S M

Parametr -S ovlivňuje i sloupce s neaktivní a aktivní pamětí.

Počet rozvětvení

Parametr -f zobrazí celkový počet rozvětvení procesů (fork) od spuštění systému. Každé spuštění nového procesu zvýší tento počet.

vmstat -f

Tento výstup se neaktualizuje.

Zobrazení Slabinfo

Jádro systému také spravuje vlastní paměť. Pro efektivní správu jádro používá tzv. „slabs“, což je forma ukládání do mezipaměti.

Paměť pro různé datové objekty jádra je předem alokována a opakovaně využívána bez nutnosti jejího uvolňování a opětovné alokace. „Slab“ si můžeme představit jako předalokované segmenty RAM, které jsou optimalizovány pro interní potřeby jádra.

Statistiky „slabs“ se zobrazí pomocí parametru -m, který vyžaduje oprávnění root. Výstup se vypisuje pomocí programu less pro pohodlnější zobrazení:

sudo vmstat -m | less

Výstup obsahuje 5 sloupců:

Cache: Název mezipaměti (slab).
num: Počet aktivních objektů v této mezipaměti.
total: Celkový počet dostupných objektů v této mezipaměti.
size: Velikost každého objektu v mezipaměti.
pages: Celkový počet stránek paměti spojených s touto mezipamětí.

Pro opuštění programu less stiskněte klávesu ‚q‘.

Zobrazení čítačů událostí a statistik paměti

Parametr -s zobrazí stránku s čítači událostí a statistikami paměti.

vmstat -s

Tyto statistiky obsahují detailnější údaje než základní výstup. Například výchozí výstup kombinuje uživatelský čas a pěkný uživatelský čas CPU do sloupce „us“, zatímco -s tyto hodnoty zobrazuje samostatně.

Zobrazení statistik disku

Podobný výpis statistiky disku se získá použitím parametru -d:

vmstat -d | less

Pro každý disk se zobrazí 3 sloupce (čtení, zápis a IO operace).

Sloupec IO se nachází vpravo. Statistiky ve sloupcích čtení a zápis jsou měřeny v milisekundách, zatímco sloupec IO je udáván v sekundách.

Popis sloupců:

Čtení

total: Celkový počet čtení z disku.
merged: Celkový počet sloučených čtení.
sectors: Celkový počet načtených sektorů.
ms: Čas (v ms) strávený čtením dat z disku.

Zápis

total: Celkový počet zápisů na disk.
merged: Celkový počet sloučených zápisů.
sectors: Celkový počet zapsaných sektorů.
ms: Čas (v ms) strávený zápisem dat na disk.

IO

cur: Počet aktuálních probíhajících čtení nebo zápisů.
sec: Čas (v sekundách) strávený aktuálními I/O operacemi.

Zobrazení souhrnné statistiky disku

Pro souhrnnou statistiku disku použijte parametr -D (velké písmeno „D“).

vmstat -D

Počet disků může být neobvykle vysoký. V systému Ubuntu jsou soubory instalované ze Snapu připojeny jako pseudo-souborový systém na zařízení /dev/loop. Tyto položky jsou mylně rozpoznány jako pevné disky.

Zobrazení statistiky oddílu

Statistiky pro konkrétní diskový oddíl získáme použitím parametru -p následovaného názvem oddílu. Například sda1 je první oddíl na zařízení sda (hlavní pevný disk).

vmstat -p sda1

Výstup obsahuje celkový počet čtení a zápisů pro daný oddíl a počet sektorů zahrnutých v těchto operacích.

Závěr

Je důležité znát, co se děje „pod kapotou“ vašeho počítače. Nástroj vmstat nabízí mnoho informací pro diagnostiku a monitoring systému. S těmito znalostmi budete lépe připraveni na případné problémy.