Praćenje diskovnog I/O-a s iostat i dstat.
Uvod
Nadzor ulazno-izlaznih operacija diska jedan je od ključnih zadataka pri upravljanju poslužiteljima u hosting infrastrukturi. Podsustav diska izravno utječe na performanse web usluga, baza podataka, virtualnih strojeva, kontejnera i pozadinskih zadataka. Čak i uz dovoljno RAM-a i slobodnih CPU resursa, preopterećeni ili spori disk može postati usko grlo cijelog sustava.
Ovaj priručnik namijenjen je sistemskim administratorima, DevOps inženjerima i vlasnicima poslužitelja. Pokriva iostat i dstat alate, principe njihovog rada, interpretaciju metrika i praktičan pristup pronalaženju uskih grla u I/O disku u hosting okruženju.
Opće informacije i principi rada
Disk I/O u infrastrukturi poslužitelja
Ulazno-izlazne operacije diska uključuju operacije čitanja i pisanja podataka na blok uređaje. U stvarnim hosting scenarijima, opterećenje na podsustavu diska najčešće generiraju:
- baze podataka (MySQL, MariaDB, PostgreSQL);
- web aplikacije s dinamičkim sadržajem;
- mail usluge;
- sigurnosne kopije podataka i sinkronizacija;
- logiranje;
- swap i privremene datoteke;
- korisnički skripti i cron poslovi.
Uska grla mogu se pojaviti zbog sporih uređaja za pohranu, visokog sukoba između procesa, neoptimalnih I/O planera, nepravilnog rada predmemorije ili značajki virtualizacije.
Svrha iostat i dstat
iostat je alat iz sysstat paketa dizajniran za prikupljanje detaljnih statistika o opterećenju CPU-a i disk uređaja. Glavni zadatak iostat-a je pokazati koliko se intenzivno koristi određeni disk, postoji li red zahtjeva i kolika je prosječna čekanja za operacije.
dstat je svestrani alat za nadzor koji prikazuje statistike u stvarnom vremenu preko nekoliko podsustava odjednom: CPU, memorija, disk, mreža, procesi. Omogućuje korelaciju aktivnosti diska s ukupnim opterećenjem poslužitelja i prikladan je za brzu dijagnostiku.
Ovi alati se međusobno nadopunjuju: iostat pruža točnu sliku na razini uređaja, dok dstat pruža kontekst cijelog sustava.
Preduvjeti i zahtjevi
Prije početka analize, moraju biti ispunjeni sljedeći uvjeti:
- Linux operativni sustav (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- SSH pristup poslužitelju.
- Root privilegije ili mogućnost izvršavanja naredbi putem sudo.
Provjera verzije OS-a:
cat /etc/os-release
Instalacija potrebnih paketa.
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
Provjera rada sysstat-a:
systemctl status sysstat
Ako je usluga aktivna, prikazat će se relevantne 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 i analiza korak po korak
Osnovna analiza diska pomoću iostat
iostat alat koristi se za procjenu opterećenja CPU-a i diskovnog podsustava, kao i za identifikaciju kašnjenja i redova I/O operacija.
Sintaksa:
sudo iostat [options] [interval] [count]
Najčešće korišteni parametri:
- -x — proširena statistika;
- -d — podaci samo za disk;
- -k — izlaz u kilobajtima;
- -p — statistika za particije ili određeni uređaj.
Osnovni primjer:
sudo iostat -x
Dinamička analiza:
sudo iostat -xk 5 3
Interval i broj uzoraka omogućuju praćenje promjena opterećenja tijekom vremena, a ne prosječno stanje od pokretanja sustava.
Primjer iostat izlaza:

Ključne CPU metrike:
- %iowait — postotak vremena kada je CPU neaktivan dok čeka I/O operacije. Povećanje ove metrike ukazuje na utjecaj diska na ukupne performanse.
- %steal — relevantno za virtualne poslužitelje i pokazuje ukradeno CPU vrijeme.
Ključne disk metrike:
- %util — postotak vremena kada je disk bio zauzet. Vrijednosti koje stalno prelaze 80–90% ukazuju na zasićenje uređaja.
- r_await — prosječno vrijeme (ms) za završetak operacija čitanja (uključujući vrijeme čekanja u redu).
- w_await — prosječno vrijeme (ms) za završetak operacija pisanja (uključujući vrijeme čekanja u redu).
- aqu-sz — (prosječna veličina reda) prosječna duljina reda zahtjeva za disk. Vrijednost > 1 već ukazuje na formiranje reda. Vrijednost > 2–4 za HDD / > 1–2 za SSD znak je da disk ne prati opterećenje.
Razlika između await i svctm pokazuje je li kašnjenje uzrokovano redom, a ne fizičkom brzinom diska.
Ako await samo malo premašuje svctm (razlika < 20–30%), kašnjenja su uglavnom uzrokovana samim diskom (sporo fizičko čitanje/pisanje).
Ako await značajno premašuje svctm (razlika > 50–100%), glavno kašnjenje uzrokovano je redom zahtjeva (aqu-sz će biti visok), što ukazuje na preopterećenje diska s mnogo paralelnih zahtjeva.
U modernim verzijama iostat-a (kao u primjeru), svctm se ne prikazuje jer je njegova izračunavanje nepouzdano. Za analizu se koristi kombinacija await + aqu-sz: visok await s niskim aqu-sz (~0) ukazuje na spor disk; visok await s visokim aqu-sz (>1) ukazuje na preopterećenje diska zahtjevima.
Analiza opće slike s dstat
dstat se koristi za promatranje sustava u stvarnom vremenu i korelaciju opterećenja diska s drugim resursima.
Primjeri naredbi:
dstat -d
dstat --disk-util
dstat -rd --disk-util
dstat -D vda,sda
Primjer pokretanja s intervalom:
dstat -rd --disk-util 1 5
Prilikom analize obratite pažnju na:
- povećanje iowait u CPU-u;
- vrhove čitanja ili pisanja;
- istovremenu mrežnu i disk aktivnost (sigurnosne kopije, sinkronizacija).
Primjer dstat izlaza:
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
Usporedba dstat i iostat:
| Kriteriji | iostat | dstat |
|---|---|---|
| Točnost podataka | Visoka | Visoka |
| Način rada u stvarnom vremenu | Ograničeno | Izvrsno |
| Povijesni podaci | Da (sar) | Ne |
| Obojeni izlaz | Ne | Da |
| Proširivost | Ne | Dodaci |
| Izvoz u CSV | Ne | Da |
| Opterećenje CPU-a | Nisko | Srednje |
dstat je posebno koristan za kratkotrajne vrhove opterećenja koji nisu uvijek primjetni u iostat-u.
Identifikacija uskih grla u I/O disku
Sljedeće naredbe koriste se za brzu dijagnostiku:
sudo iostat -mx 2
sudo iostat -p /dev/vda 2 5
sar -d 1 5
Tipični znakovi problema:
- %util iznad 80% tijekom duljeg razdoblja;
- await iznad 20–30 ms za SSD ili iznad 50–100 ms za HDD;
- aqu-sz veći od 2–3, što ukazuje na formiranje reda.
U primjeru se koristi disk /dev/vda — ovo je virtualni disk (VirtIO) na virtualnom poslužitelju. Na fizičkim poslužiteljima i u drugim okruženjima, diskovi mogu biti imenovani drugačije.
- /dev/sdX (npr. /dev/sda) — obični SATA/SAS/USB diskovi
- /dev/nvmeXnY (npr. /dev/nvme0n1) — NVMe pogoni
- /dev/vdX — virtualni diskovi
Identifikacija procesa koji uzrokuju visoko opterećenje I/O diska
Nakon utvrđivanja prisutnosti preopterećenja diskovnog podsustava pomoću iostat i dstat, sljedeći korak je identificirati specifične procese koji iniciraju intenzivne operacije čitanja ili pisanja. Analiza na razini uređaja bez identifikacije izvora opterećenja ne omogućuje ispravne korektivne mjere.
Korištenje iotop
Primarni alat za pronalaženje procesa koji aktivno koriste disk je iotop alat.
sudo iotop -ao
Parametri naredbe:
- -a — prikazuje kumulativnu statistiku od pokretanja procesa, što pomaže identificirati pozadinske zadatke s dugotrajnim I/O;
- -o — prikazuje samo one procese koji trenutno izvode I/O operacije.
Primjer izlaza:
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
U iotop izlazu, posebnu pažnju treba obratiti na polja DISK READ, DISK WRITE i postotak I/O vremena. Obično su izvori opterećenja procesi baza podataka, procesi sigurnosnih kopija, procesi sinkronizacije datoteka ili korisnički skripti.
Korištenje pidstat za analizu I/O po procesu
Za formaliziraniju i ponovljivu analizu može se koristiti pidstat, koji je dio sysstat paketa.
pidstat -d 1
Ova naredba ispisuje statistiku I/O diska za svaki proces u intervalima od jedne sekunde. Ovo je prikladno za identificiranje kratkotrajnih vrhova aktivnosti i njihovu korelaciju s drugim metrikama sustava.
pidstat je posebno koristan u situacijama kada se opterećenje pojavljuje periodično i možda ga iotop ne uhvati uvijek.
Korištenje lsof za analizu aktivnosti datoteka
U slučajevima kada je potrebno razumjeti s kojim specifičnim datotekama ili direktorijima proces radi, koristi se lsof alat.
lsof +D /path
Gdje je /path specifični direktorij unutar kojeg je potrebno identificirati aktivne datoteke i procese. Na primjer, to može biti direktorij baze podataka, direktorij sigurnosnih kopija ili područje privremenih datoteka.
Naredba omogućuje određivanje koji procesi trenutno drže deskriptore datoteka i izvode operacije unutar navedenog puta, što je posebno korisno pri analizi opterećenja aplikacija.
Analiza konteksta opterećenja
Identifikacija procesa s visokom disk aktivnošću nije krajnji cilj. Administrator treba procijeniti kontekst njegovog rada:
- je li opterećenje očekivano za ovu uslugu;
- je li proces pokrenut u odgovarajuće vrijeme (npr. sigurnosne kopije tijekom vršnih sati);
- mogu li se promijeniti raspored ili operativni parametri;
- je li dopušteno smanjiti I/O prioritet.
Ovaj pristup omogućuje razlikovanje normalnog opterećenja od problematičnog opterećenja i odabir ispravne metode optimizacije.
Provjera ispravnosti analize
Ispravnost provedene analize potvrđuje se ako:
- vrhovi u %util, await ili aqu-sz u iostat podudaraju se vremenski s aktivnošću procesa u iotop ili pidstat;
- povećanje iowait u dstat podudara se s disk operacijama, a ne s opterećenjem CPU-a;
- ponovljena mjerenja pokazuju ponovljiv obrazac opterećenja.
Za akumulaciju podataka i naknadnu analizu preporučuje se korištenje logiranja:
sar -d 1 100 > io.log
Ovo omogućuje bilježenje ponašanja diskovnog podsustava tijekom određenog razdoblja i korištenje podataka pri istraživanju incidenata.
Tipične pogreške i operativne značajke
U praksi rada s hosting poslužiteljima, najčešći problemi su:
- pokretanje sigurnosnih kopija i sinkronizacije podataka tijekom vršnih sati;
- intenzivna upotreba swap-a kada nema dovoljno RAM-a;
- neprikladan I/O planer za vrstu pogona;
- nedostatak prioritizacije za pozadinske zadatke.
Kako bi se smanjio utjecaj pozadinskih procesa na performanse, preporučuje se korištenje ionice alata za upravljanje I/O prioritetom procesa, što omogućuje smanjenje utjecaja pozadinskih zadataka na odzivnost sustava.
Primjer korištenja:
ionice -c3 rsync /source /destination
Ključni prioriteti:
- -c1 (realtime) — najviši prioritet. Koristi se za zadatke osjetljive na kašnjenje. Može potpuno blokirati druge procese.
- -c2 (best-effort) — zadano za većinu procesa. Omogućuje prilagodbu razine prioriteta (od 0 (visok) do 7 (nizak)).
- -c3 (idle) — pozadinski. Proces će dobiti pristup disku samo kada ga drugi procesi ne koriste. Sigurno i preporučeno za pozadinske operacije (sigurnosne kopije, sinkronizacija podataka).
U ovom primjeru, rsync proces se pokreće s najnižim I/O prioritetom, minimizirajući njegov utjecaj na osnovne operacije sustava. Korištenje ionice omogućuje minimiziranje utjecaja pozadinskih procesa bez potrebe za njihovim potpunim isključivanjem.
Zaključak
Nadzor ulazno-izlaznih operacija diska sastavni je dio održavanja performansi i stabilnosti infrastrukture poslužitelja. iostat i dstat alati omogućuju identifikaciju situacija preopterećenja i procjenu stanja diskovnog podsustava, dok alati poput iotop, pidstat i lsof pomažu identificirati specifične procese i prirodu njihovog opterećenja.
Redovita primjena opisanog pristupa, ispravna interpretacija metrika i upravljanje I/O prioritetima pomažu smanjiti vrijeme odziva usluga, povećati predvidljivost opterećenja i osigurati usklađenost s SLA zahtjevima. Naknadno, ova metodologija može se proširiti kroz centralizirani nadzor i automatizaciju analize I/O opterećenja.