Spremljanje diskovnega I/O z iostat in dstat
Uvod
Spremljanje vhodno-izhodnih operacij na disku je ena ključnih nalog pri upravljanju strežnikov v gostiteljski infrastrukturi. Diskovni podsistem neposredno vpliva na delovanje spletnih storitev, podatkovnih baz, virtualnih strojev, kontejnerjev in ozadnih nalog. Tudi ob zadostnem RAM-u in prostih CPU virih lahko preobremenjen ali počasen disk postane ozko grlo celotnega sistema.
Ta priročnik je namenjen sistemskim administratorjem, DevOps inženirjem in lastnikom strežnikov. Pokriva pripomočke iostat in dstat, načela njihovega delovanja, interpretacijo metrik in praktičen pristop k iskanju ozkih grl diskovnega I/O v gostiteljskem okolju.
Splošne informacije in načela delovanja
Diskovni I/O v strežniški infrastrukturi
Vhodno-izhodne operacije na disku vključujejo branje in pisanje podatkov na blokovne naprave. V resničnih gostiteljskih scenarijih je obremenitev diskovnega podsistema najpogosteje ustvarjena z:
- podatkovnimi bazami (MySQL, MariaDB, PostgreSQL);
- spletnimi aplikacijami z dinamično vsebino;
- poštnimi storitvami;
- varnostnim kopiranjem in sinhronizacijo podatkov;
- zapisovanjem dnevnikov;
- swap in začasnimi datotekami;
- uporabniškimi skripti in cron opravili.
Ozka grla se lahko pojavijo zaradi počasnih pomnilniških naprav, velikega tekmovanja med procesi, neoptimalnih I/O razporejevalnikov, nepravilnega delovanja predpomnilnika ali značilnosti virtualizacije.
Namen iostat in dstat
iostat je pripomoček iz paketa sysstat, zasnovan za zbiranje podrobnih statistik o obremenitvi CPU in diskovnih naprav. Glavna naloga iostat je prikazati, kako intenzivno se uporablja določen disk, ali obstaja čakalna vrsta zahtevkov in kakšen je povprečni čas čakanja na operacije.
dstat je vsestransko orodje za spremljanje, ki prikazuje statistiko v realnem času čez več podsistemov hkrati: CPU, pomnilnik, disk, omrežje, procesi. Omogoča korelacijo diskovne aktivnosti s celotno obremenitvijo strežnika in je priročen za hitro diagnostiko.
Ta pripomočka se dopolnjujeta: iostat zagotavlja natančno sliko na ravni naprave, medtem ko dstat zagotavlja kontekst celotnega sistema.
Predpogoji in zahteve
Pred začetkom analize morajo biti izpolnjeni naslednji pogoji:
- Operacijski sistem Linux (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- SSH dostop do strežnika.
- Root privilegiji ali možnost izvajanja ukazov prek sudo.
Preverjanje različice OS:
cat /etc/os-release
Nameščanje potrebnih paketov.
Debian / Ubuntu:
sudo apt update
sudo apt install sysstat dstat
CentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install sysstat dstat
sudo dnf install sysstat dstat
Preverjanje delovanja sysstat:
systemctl status sysstat
Če je storitev aktivna, bodo prikazane ustrezne informacije:
root@server:~# systemctl status sysstat ● sysstat.service - Resets System Activity Logs Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; preset: enabled) Active: active (exited) since Tue 2025-12-23 10:35:35 UTC; 16min ago Docs: man:sa1(8) man:sadc(8) man:sar(1) Main PID: 731 (code=exited, status=0/SUCCESS) CPU: 7ms
Pregled in analiza po korakih
Osnovna analiza diska z uporabo iostat
Pripomoček iostat se uporablja za oceno obremenitve CPU in diskovnega podsistema ter za prepoznavanje I/O zamud in čakalnih vrst.
Sintaksa:
sudo iostat [options] [interval] [count]
Najpogosteje uporabljeni parametri:
- -x — razširjena statistika;
- -d — podatki samo za disk;
- -k — izhod v kilobajtih;
- -p — statistika za particije ali določeno napravo.
Osnovni primer:
sudo iostat -x
Dinamična analiza:
sudo iostat -xk 5 3
Interval in število vzorcev omogočata sledenje spremembam obremenitve skozi čas, namesto povprečnega stanja od zagona sistema.
Primer izhoda iostat:

Ključne CPU metrike:
- %iowait — odstotek časa, ko je CPU neaktiven, medtem ko čaka na I/O operacije. Povečanje te metrike kaže na vpliv diska na celotno zmogljivost.
- %steal — pomembno za virtualne strežnike in prikazuje ukraden čas CPU.
Ključne diskovne metrike:
- %util — odstotek časa, ko je bil disk zaseden. Vrednosti, ki dosledno presegajo 80–90%, kažejo na nasičenost naprave.
- r_await — povprečni čas (ms) za dokončanje bralnih operacij (vključno s časom v čakalni vrsti).
- w_await — povprečni čas (ms) za dokončanje pisalnih operacij (vključno s časom v čakalni vrsti).
- aqu-sz — (povprečna velikost čakalne vrste) povprečna dolžina čakalne vrste zahtevkov za disk. Vrednost > 1 že kaže na oblikovanje čakalne vrste. Vrednost > 2–4 za HDD / > 1–2 za SSD je znak, da disk ne dohaja obremenitve.
Razlika med await in svctm kaže, ali je zamuda posledica čakalne vrste, ne pa hitrosti fizičnega diska.
Če await le malo presega svctm (razlika < 20–30%), so zamude predvsem posledica samega diska (počasno fizično branje/pisanje).
Če await bistveno presega svctm (razlika > 50–100%), je glavna zamuda posledica čakalne vrste (aqu-sz bo visoka), kar kaže na preobremenitev diska z mnogimi vzporednimi zahtevki.
V sodobnih različicah iostat (kot v primeru) svctm ni prikazan, ker je njegov izračun nezanesljiv. Za analizo se uporablja kombinacija await + aqu-sz: visok await z nizkim aqu-sz (~0) kaže na počasen disk; visok await z visokim aqu-sz (>1) kaže, da je disk preobremenjen z zahtevki.
Analiza celotne slike z dstat
dstat se uporablja za opazovanje sistema v realnem času in korelacijo diskovne obremenitve z drugimi viri.
Primeri ukazov:
dstat -d
dstat --disk-util
dstat -rd --disk-util
dstat -D vda,sda
Primer zagona z intervalom:
dstat -rd --disk-util 1 5
Pri analizi bodite pozorni na:
- povečanje iowait v CPU;
- vrhove branja ali pisanja;
- sočasno omrežno in diskovno aktivnost (varnostne kopije, sinhronizacija).
Primer izhoda dstat:
dstat -rd --disk-util 1 5 --io/total- -dsk/total- vda- read write| read write|util 0 4.00 | 0 76k|0.50 0 29.5 | 0 240k|0.20 0 1.00 | 0 4096B| 0 0 0 | 0 0 | 0 0 1.00 | 0 32k| 0
Primerjava dstat in iostat:
| Kriterij | iostat | dstat |
|---|---|---|
| Natančnost podatkov | Visoka | Visoka |
| Način v realnem času | Omejen | Odličen |
| Zgodovinski podatki | Da (sar) | Ne |
| Barvni izhod | Ne | Da |
| Razširljivost | Ne | Vtičniki |
| Izvoz v CSV | Ne | Da |
| Obremenitev CPU | Nizka | Srednja |
dstat je še posebej uporaben za kratkotrajne vrhove obremenitve, ki niso vedno opazni v iostat.
Prepoznavanje ozkih grl diskovnega I/O
Za hitro diagnostiko se uporabljajo naslednji ukazi:
sudo iostat -mx 2
sudo iostat -p /dev/vda 2 5
sar -d 1 5
Tipični znaki težave:
- %util nad 80% za daljše obdobje;
- await nad 20–30 ms za SSD ali nad 50–100 ms za HDD;
- aqu-sz večji od 2–3, kar kaže na oblikovanje čakalne vrste.
V primeru se uporablja disk /dev/vda — to je virtualni disk (VirtIO) na virtualnem strežniku. Na fizičnih strežnikih in v drugih okoljih so lahko diski poimenovani drugače.
- /dev/sdX (npr. /dev/sda) — običajni SATA/SAS/USB diski
- /dev/nvmeXnY (npr. /dev/nvme0n1) — NVMe pogoni
- /dev/vdX — virtualni diski
Prepoznavanje procesov, ki povzročajo visoko diskovno I/O obremenitev
Po ugotovitvi prisotnosti preobremenitve diskovnega podsistema z uporabo iostat in dstat je naslednji korak prepoznavanje specifičnih procesov, ki sprožajo intenzivne bralne ali pisalne operacije. Analiza na ravni naprave brez prepoznavanja vira obremenitve ne omogoča pravilnih korektivnih ukrepov.
Uporaba iotop
Glavno orodje za iskanje procesov, ki aktivno uporabljajo disk, je pripomoček iotop.
sudo iotop -ao
Parametri ukaza:
- -a — prikazuje kumulativno statistiko od začetka procesa, kar pomaga prepoznati ozadne naloge z dolgoročno I/O;
- -o — prikazuje samo tiste procese, ki trenutno izvajajo I/O operacije.
Primer izhoda:
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 11056 be/4 mysql 0.00 B 3.44 M 0.00 % 0.76 % mysqld 2580 be/4 rsync 0.00 B 23.48 M 0.00 % 1.17 % rsync
V izhodu iotop je treba posebno pozornost nameniti poljem DISK READ, DISK WRITE in odstotku časa I/O. Običajno so viri obremenitve procesi podatkovnih baz, procesi varnostnega kopiranja, procesi sinhronizacije datotek ali uporabniški skripti.
Uporaba pidstat za analizo I/O po procesih
Za bolj formalizirano in ponovljivo analizo se lahko uporabi pidstat, ki je del paketa sysstat.
pidstat -d 1
Ta ukaz izpiše statistiko diskovnega I/O za vsak proces v enosekundnih intervalih. To je priročno za prepoznavanje kratkotrajnih vrhov aktivnosti in njihovo korelacijo z drugimi sistemskimi metrikami.
pidstat je še posebej uporaben v situacijah, ko se obremenitev pojavlja periodično in je morda ne zajame vedno iotop.
Uporaba lsof za analizo aktivnosti datotek
V primerih, ko je treba razumeti, s katerimi specifičnimi datotekami ali imeniki proces deluje, se uporablja pripomoček lsof.
lsof +D /path
Kjer je /path specifičen imenik, znotraj katerega je treba prepoznati aktivne datoteke in procese. Na primer, to je lahko imenik podatkovne baze, imenik varnostnih kopij ali območje začasnih datotek.
Ukaz omogoča določitev, kateri procesi trenutno držijo kazalce datotek in izvajajo operacije znotraj določenega poti, kar je še posebej uporabno pri analizi obremenitve iz aplikacij.
Analiza konteksta obremenitve
Prepoznavanje procesa z visoko diskovno aktivnostjo ni končni cilj. Administrator mora oceniti kontekst njegovega delovanja:
- ali je obremenitev pričakovana za to storitev;
- ali proces teče ob ustreznem času (npr. varnostne kopije med konicami);
- ali je mogoče spremeniti urnik ali operativne parametre;
- ali je dovoljeno zmanjšati I/O prioriteto.
Ta pristop omogoča razlikovanje med normalno in problematično obremenitvijo ter izbiro pravilne metode optimizacije.
Preverjanje pravilnosti analize
Pravilnost izvedene analize je potrjena, če:
- vrhovi v %util, await ali aqu-sz v iostat sovpadajo s časom aktivnosti procesov v iotop ali pidstat;
- povečanje iowait v dstat sovpada z diskovnimi operacijami, ne pa z obremenitvijo CPU;
- ponovljene meritve kažejo ponovljiv vzorec obremenitve.
Za zbiranje podatkov in kasnejšo analizo je priporočljivo uporabljati beleženje:
sar -d 1 100 > io.log
To omogoča beleženje obnašanja diskovnega podsistema v določenem obdobju in uporabo podatkov pri preiskovanju incidentov.
Tipične napake in operativne značilnosti
V praksi upravljanja gostiteljskih strežnikov so najpogostejše naslednje težave:
- izvajanje varnostnih kopij in sinhronizacije podatkov med konicami;
- intenzivna uporaba swap pri pomanjkanju RAM-a;
- neprimeren I/O razporejevalnik za vrsto pogona;
- pomanjkanje prioritizacije za ozadne naloge.
Za zmanjšanje vpliva ozadnih procesov na zmogljivost je priporočljivo uporabiti pripomoček ionice za upravljanje I/O prioritete procesa, kar omogoča zmanjšanje vpliva ozadnih nalog na odzivnost sistema.
Primer uporabe:
ionice -c3 rsync /source /destination
Ključne prioritete:
- -c1 (v realnem času) — najvišja prioriteta. Uporablja se za naloge, občutljive na zakasnitve. Lahko popolnoma blokira druge procese.
- -c2 (najboljši napor) — privzeto za večino procesov. Omogoča prilagoditev ravni prioritete (od 0 (visoka) do 7 (nizka)).
- -c3 (v prostem času) — ozadje. Proces bo dobil dostop do diska le, ko ga ne bodo uporabljali drugi procesi. Varno in priporočljivo za ozadne operacije (varnostne kopije, sinhronizacija podatkov).
V tem primeru proces rsync teče z najnižjo I/O prioriteto, kar zmanjšuje njegov vpliv na osnovne sistemske operacije. Uporaba ionice omogoča zmanjšanje vpliva ozadnih procesov, ne da bi jih bilo treba popolnoma onemogočiti.
Zaključek
Spremljanje diskovnega I/O je sestavni del vzdrževanja zmogljivosti in stabilnosti strežniške infrastrukture. Pripomočka iostat in dstat omogočata prepoznavanje situacij preobremenitve in oceno stanja diskovnega podsistema, medtem ko orodja, kot so iotop, pidstat in lsof, pomagajo prepoznati specifične procese in naravo njihove obremenitve.
Redna uporaba opisanega pristopa, pravilna interpretacija metrik in upravljanje I/O prioritet pomagajo zmanjšati čase odziva storitev, povečati predvidljivost obremenitve in zagotoviti skladnost z zahtevami SLA. Kasneje se lahko ta metodologija razširi z uporabo centraliziranega spremljanja in avtomatizacije analize I/O obremenitve.