Spremljanje vnosno-izhodnih operacij na disku z orodjema iostat in dstat: odkrivanje ozkih grl
Uvod
Spremljanje vhodno-izhodnih operacij diska je ena od ključnih nalog pri upravljanju strežnikov v gostovalni infrastrukturi. Diskovni podsistem neposredno vpliva na zmogljivost spletnih storitev, podatkovnih baz, virtualnih strojev, kontejnerjev in nalog v ozadju. Tudi ob zadostni količini pomnilnika RAM in prostih virov procesorja lahko preobremenjen ali počasen disk postane ozko grlo celotnega sistema.
Ta priročnik je namenjen sistemskim administratorjem, inženirjem DevOps in lastnikom strežnikov. Obravnava orodji iostat in dstat, načela njihovega delovanja, razlago kazalnikov ter praktičen pristop k odkrivanju ozkih grl pri vhodno-izhodnih operacijah diska v gostovalnem okolju.
Splošne informacije in načela delovanja
Vhodno-izhodne operacije diska v strežniški infrastrukturi
Vhodno-izhodne operacije diska vključujejo operacije branja in pisanja podatkov na blokovne naprave. V realnih scenarijih gostovanja obremenitev diskovnega podsistema najpogosteje povzročajo:
- podatkovne baze (MySQL, MariaDB, PostgreSQL);
- spletne aplikacije z dinamično vsebino;
- poštne storitve;
- varnostno kopiranje in sinhronizacija podatkov;
- beleženje;
- izmenjalne in začasne datoteke;
- uporabniški skripti in cron naloge.
Zastoji lahko nastanejo zaradi počasnih naprav za shranjevanje, visoke konkurence med procesi, neoptimalnih razporejevalnikov vhodno-izhodnih operacij, nepravilnega delovanja predpomnilnika ali funkcij virtualizacije.
Namen programov iostat in dstat
iostat je pripomoček iz paketa sysstat, namenjen zbiranju podrobnih statistik o obremenitvi procesorja in diskovnih naprav. Glavna naloga iostata je prikazati, kako intenzivno se uporablja določen disk, ali obstaja čakalna vrsta zahtevkov in kakšen je povprečni čas čakanja za operacije.
dstat je vsestransko orodje za spremljanje, ki v realnem času prikazuje statistike za več podsistemov hkrati: procesor, pomnilnik, disk, omrežje in procese. Omogoča povezovanje aktivnosti diska s splošno obremenitvijo strežnika in je priročno za hitro diagnostiko.
Ta orodja se med seboj dopolnjujejo: iostat zagotavlja natančen vpogled na ravni naprave, medtem ko dstat ponuja kontekst celotnega sistema.
Predpogoji in zahteve
Pred začetkom analize morajo biti izpolnjeni naslednji pogoji:
- Operacijski sistem Linux (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- Dostop do strežnika prek SSH.
- Privilegiji root ali možnost izvajanja ukazov prek sudo.
Preverjanje različice operacijskega sistema:
cat /etc/os-release
Namestitev potrebnih paketov:
Debian / Ubuntu:
sudo apt update sudo apt install sysstat dstat
CentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install sysstat dstat # or sudo dnf install sysstat dstat
Preverjanje delovanja sysstat:
systemctl status sysstat
Če je storitev aktivna, se prikažejo 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
Program iostat se uporablja za oceno obremenitve procesorja in diskovnega podsistema ter za prepoznavanje zamud pri vhodno-izhodnih operacijah in čakalnih vrst.
Sintaksa:
sudo iostat [options] [interval] [count]
Najpogosteje uporabljeni parametri:
- -x – razširjene statistike;
- -d – podatki samo o disku;
- -k – izpis 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 vam omogočata spremljanje sprememb obremenitve skozi čas, namesto povprečnega stanja od zagona sistema.
Primer izpisa iostat

Ključni kazalniki CPU:
- %iowait – odstotek časa, ko je CPU v mirovanju med čakanjem na operacije I/O. Povečanje te metrike kaže na vpliv diska na splošno zmogljivost.
- %steal – pomemben za virtualne strežnike, prikazuje ukraden čas procesorja.
Ključni kazalniki diska:
- %util – odstotek časa, v katerem je bil disk zaseden. Vrednosti, ki dosledno presegajo 80–90 %, kažejo na zasičenost naprave.
- r_await – povprečni čas (v milisekundah) za zaključek operacij branja (vključno s časom v čakalni vrsti).
- w_await – povprečni čas (v milisekundah) za zaključek operacij pisanja (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 nastajanje čakalne vrste. Vrednost > 2–4 za HDD / > 1–2 za SSD je znak, da disk ne dohaja obremenitve.
Razlika med vrednostma »await« in »svctm« kaže, ali je zamuda posledica čakalne vrste in ne fizične hitrosti diska.
Če vrednost »await« le nekoliko presega vrednost »svctm« (razlika < 20–30 %), zamude v glavnem povzroča sam disk (počasno fizično branje/pisanje).
Če je vrednost »await« znatno večja od »svctm« (razlika > 50–100 %), je glavni vzrok zamude čakalna vrsta zahtevkov (vrednost »aqu-sz« bo visoka), kar kaže na preobremenjenost diska zaradi številnih vzporednih zahtevkov.
V sodobnih različicah iostata (kot v primeru) se vrednost svctm ne prikaže, ker je njen izračun nezanesljiv. Za analizo se uporablja kombinacija vrednosti »await« in »aqu-sz«: visoka vrednost »await« ob nizki vrednosti »aqu-sz« (~0) kaže na počasen disk; visoka vrednost »await« ob visoki vrednosti »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 povezovanje obremenitve diska z drugimi viri.
Primeri ukazov:
dstat -d dstat --disk-util dstat -rd --disk-util dstat -D vda,sda
Primer izvajanja 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 delovanje (varnostne kopije, sinhronizacija).
Example dstat output: 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:
| Merila | iostat | dstat |
|---|---|---|
| Natančnost podatkov | Visoka | Visoka |
| Način v realnem času | Omejen | Odlična |
| Zgodovinski podatki | Da (sar) | Ne |
| Barvni izpis | Ne | Da |
| Razširljivost | Ne | Vtičniki |
| Izvoz v CSV | Ne | Da |
| Obremenitev procesorja | Nizka | Srednja |
dstat je še posebej uporaben za kratkotrajne konice obremenitve, ki v iostatu niso vedno opazne.
Prepoznavanje ozkih grl pri vnosu in iznosu podatkov na disk
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 kopičenje v čakalni vrsti.
V primeru je uporabljen disk /dev/vda – to je virtualni disk (VirtIO) na virtualnem strežniku.
Na fizičnih strežnikih in v drugih okoljih so diski lahko poimenovani drugače:
- /dev/sdX (npr. /dev/sda) – običajni diski SATA/SAS/USB
- /dev/nvmeXnY (npr. /dev/nvme0n1) – pogoni NVMe
- /dev/vdX – virtualni diski
Prepoznavanje procesov, ki povzročajo visoko obremenitev diska z vnosno-izhodnimi operacijami
Ko z orodjema iostat in dstat ugotovite preobremenitev diskovnega podsistema, je naslednji korak prepoznavanje konkretnih procesov, ki sprožajo intenzivne operacije branja ali pisanja. Analiza na ravni naprave brez prepoznavanja vira obremenitve ne omogoča sprejetja pravilnih ukrepov za odpravo težave.
Uporaba iotop
Glavno orodje za iskanje procesov, ki aktivno uporabljajo disk, je program iotop.
sudo iotop -ao
Parametri ukaza:
-a – prikaže kumulativne statistike od začetka procesa, kar pomaga pri prepoznavanju nalog v ozadju z dolgotrajnim vnosom/iznosom;
-o – prikaže le tiste procese, ki trenutno izvajajo operacije I/O.
Primer izpisa:
TID 41PRIO USER41DISK READ41DISK WRITE41SWAPIN41IO>4141COMMAND 1105641be/441mysql410.00 B 413.44 M410.00 %410.76 %41mysqld 258041be/441rsync410.00 B4123.48 M410.00 %411.17 %41rsync
V izpisu iotop je treba posebno pozornost nameniti poljem DISK READ, DISK WRITE in odstotku časa I/O. Običajno so viri obremenitve procesi baze podatkov, procesi varnostnega kopiranja, procesi sinhronizacije datotek ali uporabniški skripti.
Uporaba pidstat za analizo I/O po posameznih procesih
Za bolj formalizirano in ponovljivo analizo se lahko uporabi program pidstat, ki je del paketa sysstat.
pidstat -d 1
Ta ukaz izpiše statistiko I/O na disku za vsak proces v intervalih ene sekunde. To je priročno za prepoznavanje kratkotrajnih konic aktivnosti in njihovo povezovanje z drugimi sistemskimi kazalniki.
pidstat je še posebej uporaben v situacijah, kjer se obremenitev pojavlja periodično in je morda ne zazna vedno iotop.
Uporaba lsof za analizo aktivnosti datotek
V primerih, ko je treba ugotoviti, s katerimi konkretnimi datotekami ali imeniki deluje proces, se uporabi pripomoček lsof.
lsof +D /path
Kjer je/path določena mapa, v kateri je treba identificirati aktivne datoteke in procese. To je lahko na primer mapa z bazami podatkov, mapa z varnostnimi kopijami ali območje za začasne datoteke.
Ukaz omogoča ugotavljanje, kateri procesi trenutno zadržujejo deskriptorje datotek in izvajajo operacije znotraj določene poti, kar je še posebej koristno pri analizi obremenitve iz aplikacij.
Analiza konteksta obremenitve
Prepoznavanje procesa z visoko aktivnostjo na disku ni končni cilj. Sistemski skrbnik mora oceniti kontekst njegovega delovanja:
- ali je obremenitev za to storitev pričakovana;
- ali proces teče v primernem času (npr. varnostne kopije v konicah);
- ali je mogoče spremeniti urnik ali operativne parametre;
- ali je dovoljeno zmanjšati prioriteto I/O.
Ta pristop omogoča razlikovanje med normalno in problematično obremenitvijo ter izbiro ustrezne metode optimizacije.
Preverjanje pravilnosti analize
Pravilnost opravljene analize je potrjena, če:
- se vrhovi v %util, await ali aqu-sz v iostatu časovno ujemajo z aktivnostjo procesov v iotopu ali pidstatu;
- se povečanje vrednosti iowait v dstat časovno ujema z operacijami na disku in ne z obremenitvijo CPU;
- ponavljajoče se meritve kažejo ponovljiv vzorec obremenitve.
Za zbiranje podatkov in naknadno analizo se priporoča uporaba beleženja:
sar -d 1 100 > io.log
To vam omogoča beleženje delovanja diskovnega podsistema v določenem časovnem obdobju in uporabo podatkov pri preiskovanju incidentov.
Tipične napake in značilnosti delovanja
V praksi upravljanja gostiteljskih strežnikov so najpogostejše naslednje težave:
- izvajanje varnostnih kopij in sinhronizacija podatkov v konicah;
- intenzivna uporaba izmenjalnega prostora, kadar ni dovolj pomnilnika RAM;
- neustrezen I/O-razporejevalnik za tip diska;
- pomanjkanje določanja prioritet za naloge v ozadju.
Da bi zmanjšali vpliv procesov v ozadju na zmogljivost, je priporočljivo uporabiti pripomoček ionice za upravljanje prioritete I/O procesa, kar omogoča zmanjšanje vpliva nalog v ozadju na odzivnost sistema.
Primer uporabe:
ionice -c3 rsync /source /destination
Ključne prioritete:
- -c1 (v realnem času) – najvišja prioriteta. Uporablja se za naloge, pri katerih je zakasnitev kritična. Lahko popolnoma blokira druge procese.
- -c2 (best-effort) – privzeta nastavitev za večino procesov. Omogoča prilagajanje ravni prioritete (od 0 (visoka) do 7 (nizka)).
- -c3 (idle) – ozadje. Proces bo dobil dostop do diska le, če ga ne uporablja noben drug proces. Varno in priporočljivo za operacije v ozadju (varnostne kopije, sinhronizacija podatkov).
V tem primeru proces rsync teče z najnižjo I/O prioriteto, kar zmanjša njegov vpliv na osnovne sistemske operacije. Uporaba ionice vam omogoča, da zmanjšate vpliv procesov v ozadju, ne da bi jih morali popolnoma onemogočiti.
Zaključek
Spremljanje diskovnega I/O je sestavni del ohranjanja zmogljivosti in stabilnosti strežniške infrastrukture. Programi iostat in dstat vam omogočajo prepoznavanje situacij preobremenitve in oceno stanja diskovnega podsistema, medtem ko orodja, kot so iotop, pidstat in lsof, pomagajo prepoznati posamezne procese in naravo njihove obremenitve.
Redna uporaba opisanega pristopa, pravilna interpretacija kazalnikov in upravljanje prioritet I/O pomagajo skrajšati odzivne čase storitev, povečati predvidljivost obremenitve in zagotoviti skladnost z zahtevami SLA. To metodologijo je mogoče naknadno razširiti s centraliziranim spremljanjem in avtomatizacijo analize obremenitve I/O.