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.