iostat a iotop: diagnostika úzkých míst úložiště Linuxu
14 min čtení - 12. června 2026

Pomocí iostat a iotop zjistěte úzká místa diskového I/O systému Linux. Pokrývá %util gotcha na NVMe, čtení await a hloubku fronty a pracovní postup pro jejich nalezení a opravu.
iostat a iotop: diagnostika úzkých míst úložiště v Linuxu
Když se Linuxový server jeví jako pomalý, úložiště je jedním z prvních míst, kam se podívat. iostat vám ukáže, zda je disk přetížený; iotop vám ukáže, který proces způsobuje zátěž. Společně odpovídají na dvě důležité otázky: je disk skutečně úzkým hrdlem, a pokud ano, co ho zatěžuje? Tento příspěvek se zabývá instalací, tím, jak číst výstup (včetně toho, kde se na moderním hardwaru nachází metrika iostat %util na moderním hardwaru) a postup od příznaku k řešení.
Instalace iostat a iotop
iostat je součástí balíčku sysstat; iotop se dodává samostatně. Nainstalujte oba:
# Debian/Ubuntu
sudo apt install sysstat iotop
# RHEL, AlmaLinux, Rocky, CentOS Stream
sudo dnf install sysstat iotop
# Arch
sudo pacman -S sysstat iotopV Ubuntu je sysstat dodáván v deaktivovaném stavu. Chcete-li shromažďovat data na pozadí pro pozdější analýzu pomocí sar, upravte /etc/default/sysstatnastavte ENABLED="true"a restartujte službu:
sudo systemctl restart sysstatiotop musí běžet jako root. V RHEL 9 a novějších verzích je měření zpoždění ve výchozím nastavení deaktivováno, což ponechává IO a SWAPIN prázdné. Zapněte je příkazem:
echo 1 | sudo tee /proc/sys/kernel/task_delayacctPřidejte kernel.task_delayacct = 1 do /etc/sysctl.conf , aby se nastavení zachovalo i po restartu.
Čtení výstupu iostat
Spusťte iostat s rozšířenými statistikami a ignorujte první vzorek, který zobrazuje pouze průměry od spuštění systému:
iostat -xz 2Příznak -x příznak přidává rozšířené statistiky, -z skryje neaktivní zařízení a 2 obnovuje data každé dvě sekundy. Důležité sloupce:
await: průměrná doba v milisekundách potřebná k dokončení požadavku na vstup/výstup, včetně doby čekání ve frontě. Jediné nejdůležitější číslo, když si uživatelé stěžují na pomalost.r/saw/s: IOPS pro čtení a zápis. V kombinaci srkB/sawkB/svám tyto údaje řeknou, zda je vaše pracovní zátěž náhodná (vysoké IOPS, nízká propustnost) nebo sekvenční (nízké IOPS, vysoká propustnost).aqu-sz: průměrná hloubka fronty. U pevných disků (HDD) znamená jakákoli hodnota trvale vyšší než 1, že disk nestíhá.%util: procentuální podíl času, kdy zařízení mělo alespoň jeden probíhající I/O. Užitečné u HDD, zavádějící u NVMe (viz níže).
Rychlý přehled prahových hodnot:
| Typ disku | problém s čekáním | aqu-sz problém | %util spolehlivé? |
|---|---|---|---|
| HDD 7200 ot./min | > 20 ms | > 1 | Ano |
| SSD SATA | > 10 ms | > 4 | Většinou |
| NVMe | > 1–2 ms | > 16 | Ne |
Místo, kde se nachází %util
%util je metrikou, po které většina lidí sáhne jako první, a u NVMe je aktivně zavádějící. Jádro počítá %util jako „jakýkoli I/O v daném okamžiku“, což je v pořádku pro rotující disk, který zpracovává jeden požadavek najednou, ale nemá to žádný význam pro zařízení NVMe, která zpracovávají tisíce požadavků paralelně napříč hardwarovými frontami. Disk NVMe může být na 100 % %util , zatímco pracuje na 5 % své skutečné kapacity.
U NVMe se řiďte r_await, w_awaita aqu-sz místo toho. Pokud r_await zůstává pod 1 ms a hloubka fronty je pohodlně pod hloubkou hardwarové fronty zařízení (často 1024 nebo více), disk ve skutečnosti není nasycený bez ohledu na to, co %util říká.
Pro rychlý náhled na NVMe v MB/s namísto kB/s:
iostat -xm 1Pro dlouhodobý sběr dat můžete později provést korelaci s protokoly aplikací:
iostat -x -t 5 720 > /var/log/iostat.logTo odebírá vzorky každých 5 sekund po dobu jedné hodiny. sar ze stejného balíčku sysstat vám poskytne ekvivalentní data s trvalým historickým úložištěm a je lepší volbou pro průběžné monitorování.
Potvrzení pomocí CPU iowait
Pokud iostat ukazuje zatížení úložiště, zkontrolujte to pomocí %iowait sloupcem v souhrnu CPU v horní části stejného výstupu. Trvalá %iowait hodnota nad 15–20 % spolu s vysokou await potvrzuje, že úzkým hrdlem je úložiště. Pokud %iowait je vysoká, ale await vypadá normálně, spusťte vmstat 1 a zkontrolujte si a so . Ne nulová aktivita swapu znamená, že jste omezeni pamětí a provoz na disku je stránkování, nikoli I/O aplikace.
Čtení výstupu iotop
Jakmile iostat potvrdí úzké místo v úložišti, iotop vám sdělí, který proces je za to zodpovědný. Začněte s:
sudo iotop -oPříznak -o skryje nečinné procesy a ponechá pouze ty, které aktivně provádějí I/O. Sloupce, které je třeba sledovat:
- DISK READ / DISK WRITE: propustnost v reálném čase na proces. Identifikuje zjevné „těžké váhy“.
- IO: procentuální podíl času, po který je proces blokován na I/O. Proces zapisující pouhých 50 kB/s může vykazovat 99 % IO, pokud provádí drobná synchronní
fsync()volání. Tento sloupec je důležitější než hrubá propustnost. - SWAPIN: procento času stráveného čekáním na stránkovací stránky. Hodnota jiná než nula zde znamená, že systém stránkuje a váš „problém s úložištěm“ je ve skutečnosti problémem s pamětí.
U vícevláknových aplikací (MySQL, PostgreSQL, Java) agregujte vlákna zpět do procesů pomocí -Pa přidejte -a pro akumulaci celkových hodnot od spuštění iotopu:
sudo iotop -oPaPříznak -a je trikem pro zachycení nárazových úloh, jako jsou zálohovací úlohy, které běží jen několik sekund najednou a jinak by bylo těžké je v živém zobrazení odhalit.
Pro automatické protokolování během nočních časových oken, kdy nikdo nesleduje:
sudo iotop -botqq -d 10 > /var/log/iotop.logTím se každých 10 sekund zapíše neinteraktivní snímek. Spojte to s časovými značkami ze zálohovacích nebo cron úloh, abyste mohli dodatečně najít viníka.
Diagnostický postup
Většina vyšetřování diskových I/O operací probíhá stejným způsobem:
iostat -xz 2potvrdit, že disk je skutečně úzkým hrdlem. Podívejte se naawait,aqu-sza%iowait. Pokud jsou tyto hodnoty v normě, problém není v úložišti a měli byste hledat úplně jinde.iotop -oPanajít proces, který způsobuje zátěž. Sledujte spíše sloupec IO než sloupec propustnosti. Nejhoršími viníky jsou často programy provádějící mnoho malých synchronních zápisů, nikoli ty, které přesouvají nejvíce bajtů.lsof -p <pid>abyste zjistili, s jakými soubory tento proces pracuje. To obvykle okamžitě identifikuje typ pracovní zátěže: databázový protokol předběžného zápisu, soubor protokolu aplikace, připojovací bod zálohy, dočasný soubor.
Dva vzorce, které stojí za to znát.
Pokud vidíte vlákna jádra jako jbd2/... (ext4 journal) nebo txg_sync (ZFS) v horní části seznamu zapisovatelů v iotopu, reagují na zápisy od jiných procesů, nikoli je iniciují. Skutečnou příčinou je proces v uživatelském prostoru, který řídí provoz deníku; pokračujte v pátrání.
Na VPS je vysoký await s nízkým %util je klasickým signálem hlučného souseda. Jiný nájemník monopolizuje sdílené úložiště a vaše I/O se řadí do fronty na straně hypervizoru, nikoli na vašem virtuálním disku. Můžete to potvrdit, ale ne opravit zevnitř hosta; řešením je buď eskalovat problém k poskytovateli, nebo přejít na server s izolovaným úložištěm.
Odstraňování běžných úzkých míst I/O
Jakmile zjistíte, co zatěžuje disk, řešení je obvykle jednoduché.
Snižte prioritu nekritického I/O. ionice umístí proces do třídy nečinného plánování, kde využívá šířku pásma disku pouze tehdy, když ji nikdo jiný nepotřebuje:
ionice -c 3 -p <pid>
sudo ionice -c 3 rsync -a /data /backupPrvní forma mění spuštěný proces; druhá spouští nový proces, který je již v nečinné třídě. V nástroji iotop můžete interaktivně změnit prioritu spuštěného procesu stisknutím klávesy i.
Přesuňte náročné úlohy na rychlejší úložiště. Pokud iostat ukazuje, že disk SATA je přetížen zápisy do databáze a ve stejném počítači je nečinný disk NVMe, přemístěte adresář s daty databáze. Rozdíl v řádu řádů v IOPS z toho dělá nejúčinnější dostupné řešení.
Nastavte správný plánovač I/O. Moderní jádra mají rozumné výchozí nastavení, ale stojí za to to zkontrolovat. Pro NVMe a SSD nastavte plánovač na none. Zařízení zvládá řazení do front v hardwaru lépe než jádro:
echo none > /sys/block/nvme0n1/queue/schedulerPro HDD zpracovávající smíšené pracovní zatížení mq-deadline je obvyklou volbou.
Připojte s noatime. Každé čtení ve výchozím nastavení aktualizuje časové razítko posledního přístupu k souboru, což generuje zápis pro každé čtení. Na souborových systémech s velkým množstvím čtení se jedná o zbytečné I/O. Přidejte noatime do možností připojení v /etc/fstab:
UUID=... /data ext4 defaults,noatime 0 2Nalaďte writeback pro nárazové zápisy. Na serverech s dostatkem RAM umožňují výchozí prahové hodnoty špinavých stránek, aby se v stránkovací paměti nahromadily gigabajty nezapsaných dat, které se pak vyprázdní v jednom velkém zpoždění. Snižte prahové hodnoty v /etc/sysctl.conf , abyste to vyrovnali:
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5Samotný disk obvykle není problémem. Pokud iostat ukazuje vysoké IOPS a nízkou propustnost, pracovní zátěž provádí náhodné I/O na datech, která by mohla být sekvenční, nebo provádí mnoho malých zápisů, které by mohly být seskupeny. Než budete obviňovat hardware, podívejte se na aplikaci.
Pokud provádíte úlohy náročné na úložiště na serveru, kde síť může předběhnout disk, dedikované servery FDC s podporou NVMe vám poskytnou prostor pro produktivní použití výše uvedeného ladění.

Vyladěné profily pro optimalizaci pracovní zátěže linuxových serverů
Jak vybrat, použít a přizpůsobit vyladěné profily pro GPU, databáze a linuxové servery s velkou šířkou pásma, s příklady a tipy pro nasazení Ansible.
16 min čtení - 9. června 2026
Linux OOM Killer Tuning for VPS: Praktický průvodce
12 min čtení - 8. června 2026

Máte dotazy nebo potřebujete vlastní řešení?
Flexibilní možnosti
Globální dosah
Okamžité nasazení
Flexibilní možnosti
Globální dosah
Okamžité nasazení