iostat ja iotop: Linuxi salvestusruumi kitsaskohtade diagnoosimine

14 min lugemine - 12. juuni 2026

hero section cover
Sisukord
  • iostat ja iotop: Linuxi salvestusruumi pudelikaelte diagnoosimine
  • Iostat ja iotop paigaldamine
  • Iostati väljundi lugemine
  • Iotopi väljundi lugemine
  • Diagnostiline töövoog
  • Tavaliste I/O-pudelikaelte kõrvaldamine
Jaga

Kasutage iostat'i ja iotop'i, et leida Linuxi ketta I/O kitsaskohti. Käsitletakse %util gotcha NVMe, lugemise ootel ja järjekorra sügavus ning töövoog selle leidmiseks ja parandamiseks.

iostat ja iotop: Linuxi salvestusruumi pudelikaelte diagnoosimine

Kui Linuxi server tundub aeglane, on salvestusruum üks esimesi kohti, mida tuleks kontrollida. iostat näitab, kas kettal on ülekoormus; iotop näitab, milline protsess koormust põhjustab. Koos kasutades annavad need vastuse kahele olulisele küsimusele: kas ketas on tegelikult pudelikael ja kui jah, siis mis seda koormab? See postitus käsitleb installimist, väljundi lugemist (sh seda, kus iostati %util näitaja asub kaasaegsel riistvaral) ning töövoogu sümptomist lahenduseni jõudmiseks.

Iostat ja iotop paigaldamine

iostat kuulub sysstat-paketti; iotop tarnitakse eraldi. Paigaldage mõlemad:

# Debian/Ubuntu
sudo apt install sysstat iotop
 
# RHEL, AlmaLinux, Rocky, CentOS Stream
sudo dnf install sysstat iotop
 
# Arch
sudo pacman -S sysstat iotop

Ubuntus on sysstat vaikimisi keelatud. Taustandmete kogumiseks hilisemaks analüüsimiseks programmiga sar, redigeerige /etc/default/sysstat, seadistage ENABLED="true"ja taaskäivitage teenus:

sudo systemctl restart sysstat

iotop peab töötama root-õigustes. RHEL 9 ja uuemates versioonides on viivitusarvestus vaikimisi keelatud, mis jätab IO ja SWAPIN veergud tühjaks. Lülitage see sisse järgmiselt:

echo 1 | sudo tee /proc/sys/kernel/task_delayacct

Lisa kernel.task_delayacct = 1 faili /etc/sysctl.conf , et see püsiks ka pärast taaskäivitamist.

Iostati väljundi lugemine

Käivita iostat laiendatud statistikaga ja jäta tähelepanuta esimene näidis, mis näitab ainult keskmisi väärtusi alates süsteemi käivitamisest:

iostat -xz 2

Lipuga -x lipuke lisab laiendatud statistika, -z peidab kasutamata seadmed ning 2 värskendab andmeid iga kahe sekundi järel. Olulised veerud:

  • await: I/O-päringu täitmise keskmine aeg millisekundites, sealhulgas järjekorras ooteaeg. Kõige olulisem number, kui kasutajad kurdavad aegluse üle.
  • r/s ja w/s: lugemis- ja kirjutamis-IOPS. Kombineerituna rkB/s ja wkB/s näitavad need, kas teie töökoormus on juhuslik (kõrge IOPS, madal läbilaskevõime) või järjestikune (madal IOPS, kõrge läbilaskevõime).
  • aqu-sz: keskmine järjekorra pikkus. HDD-de puhul tähendab mis tahes püsiv väärtus üle 1, et ketas ei suuda sammu pidada.
  • %util: protsentuaalne aeg, mil seadmel oli vähemalt üks käimasolev I/O. Kasulik HDD-de puhul, eksitav NVMe puhul (vaata allpool).

Kiire künnisviide:

Kõvaketta tüüpootamise probleemaqu-sz probleem%util usaldusväärne?
7200 RPM HDD> 20 ms> 1Jah
SATA SSD> 10 ms> 4Enamasti
NVMe> 1–2 ms> 16Ei

Kus %util asub

%util , on näitaja, mida enamik inimesi esimesena vaatab, kuid NVMe puhul on see aktiivselt eksitav. Tuum loeb %util „kõiki igal hetkel käimasolevaid sisend-väljundoperatsioone”, mis sobib hästi pöörlevale kettale, mis töötleb ühte päringut korraga, kuid on mõttetu NVMe-seadmete puhul, mis töötlevad tuhandeid päringuid paralleelselt riistvarajärjekordades. NVMe-ketas võib olla 100% %util , töötades samal ajal vaid 5% oma tegelikust võimsusest.

NVMe puhul usaldage r_await, w_awaitja aqu-sz selle asemel. Kui r_await jääb alla 1 ms ja järjekorra sügavus on mugavalt allpool seadme riistvarajärjekorra sügavust (sageli 1024 või rohkem), ei ole kõvaketas tegelikult ülekoormatud, hoolimata sellest, mida %util ütleb.

Kiire NVMe puhul vaadake pigem MB/s kui kB/s:

iostat -xm 1

Pikaajalise kogumise puhul saate hiljem korrelatsiooni luua rakenduse logidega:

iostat -x -t 5 720 > /var/log/iostat.log

See võtab proove iga 5 sekundi järel ühe tunni jooksul. sar Sama sysstat-paketi abil saate samaväärseid andmeid püsiva ajaloolise salvestusega ja see on parem valik pidevaks seireks.

Kinnitamine CPU iowaitiga

Kui iostat näitab salvestusruumi koormust, kontrollige seda %iowait samas väljundi ülaosas asuva CPU kokkuvõtte veeruga. Pidev %iowait üle 15–20% koos kõrge await kinnitab, et pudelikaelaks on salvestusruum. Kui %iowait on kõrge, kuid await näib normaalne, käivitage vmstat 1 ja kontrollige si ja so . Nullist erinev vahetusmälu aktiivsus tähendab, et tegemist on mälupiiranguga ja kettaliiklus on lehekülgede vahetamine, mitte rakenduse sisend-väljund.

Iotopi väljundi lugemine

Kui iostat on kinnitanud salvestusruumi pudelikaela olemasolu, näitab iotop, milline protsess selle põhjustab. Alustage järgmiselt:

sudo iotop -o

Lipuga -o lipuke peidab tühikäigul olevad protsessid, jättes alles ainult need, mis tegelevad aktiivselt sisend-väljundiga. Veerud, mida jälgida:

  • DISK READ / DISK WRITE: reaalajas läbilaskevõime protsessi kohta. Määrab kindlaks ilmsed suurimad koormajad.
  • IO: protsendi osakaal ajast, mil protsess on I/O tõttu blokeeritud. Protsess, mis kirjutab vaid 50 kB/s, võib näidata 99% IO-d, kui ta teeb väikeseid sünkroonseid fsync() kõnesid. See veerg on olulisem kui toores läbilaskevõime.
  • SWAPIN: protsentuaalne aeg, mil oodatakse vahetuslehti. Kui see väärtus ei ole null, tähendab see, et süsteem kasutab lehekülgede vahetamist ja teie „salvestusruumi probleem” on tegelikult mäluprobleem.

Mitme niidiga rakenduste puhul (MySQL, PostgreSQL, Java töökoormused) koondage niidid tagasi protsessideks -Pja liita -a , et koguda kokkuvõtteid alates iotopi käivitamisest:

sudo iotop -oPa

Lipp -a lipu abil on võimalik tabada järske töökoormusi, nagu varundustööd, mis kestavad korraga vaid mõne sekundi ja mida muidu oleks reaalajas vaates raske märgata.

Järelevalveta logimiseks öösel, kui keegi ei vaata:

sudo iotop -botqq -d 10 > /var/log/iotop.log

See kirjutab iga 10 sekundi järel mitteinteraktiivse hetkeülevaate. Kombineerige seda oma varundus- või cron-ülesannete ajamärkidega, et leida süüdlane tagantjärele.

Diagnostiline töövoog

Enamik kettaseadme sisend-väljund-operatsioonide uurimisi kulgeb samamoodi:

  1. iostat -xz 2 et kinnitada, et kettad on tõepoolest pudelikaelaks. Vaadake await, aqu-szja %iowait. Kui need on normaalsed, ei ole probleem salvestusruumis ja peaksite otsima hoopis mujalt.
  2. iotop -oPa et leida koormust tekitav protsess. Jälgige pigem IO-veergu kui läbilaskevõime veergu. Kõige suuremad süüdlased on sageli programmid, mis teevad palju väikeseid sünkroonseid kirjutamisi, mitte need, mis liigutavad kõige rohkem baiti.
  3. lsof -p <pid> et näha, milliseid faile see protsess puudutab. See tuvastab tavaliselt koormuse tüübi kohe: andmebaasi eelkirjutamise logi, rakenduse logifaili, varukoopia kinnituspunkti, ajutise faili.

Kaks teadmisväärset mustrit.

Kui näete tuumakiude nagu jbd2/... (ext4 journal) või txg_sync (ZFS), siis need reageerivad teiste protsesside kirjutustele, mitte ei algata neid. Päevikuliiklust põhjustav kasutajaruumi protsess on tegelik põhjus; uurige edasi.

VPS-is on kõrge await ja madal %util on klassikaline märk mürarikkast naabrist. Teine rentnik monopoliseerib jagatud salvestusruumi ja teie I/O seisab järjekorras hüperviisori poolel, mitte teie virtuaalsel kettal. Te saate seda külaliskeskkonnas kinnitada, kuid mitte parandada; lahenduseks on kas pöörduda teenusepakkuja poole või kolida serverisse, millel on isoleeritud salvestusruum.

Tavaliste I/O-pudelikaelte kõrvaldamine

Kui teate, mis kettale mõju avaldab, on parandused tavaliselt lihtsad.

Vähendage mitteolulise I/O prioriteeti. ionice paigutab protsessi ooterežiimi klassi, kus see kasutab kettaribalaiust ainult siis, kui keegi teine seda ei vaja:

ionice -c 3 -p <pid>
sudo ionice -c 3 rsync -a /data /backup

Esimene vorm muudab käimasolevat protsessi; teine käivitab uue protsessi, mis on juba ooterežiimis. Iotopis saate muuta käimasoleva protsessi prioriteeti interaktiivselt, vajutades klahvi i.

Viige aktiivsed töökoormused kiiremale salvestusruumile. Kui iostat näitab, et SATA-ketas on ülekoormatud andmebaasi kirjutustega ja samas seadmes on kasutamata NVMe, paigutage andmebaasi andmekataloog ümber. IOPS-i suurusjärkude vahe teeb sellest kõige tõhusama lahenduse.

Määrake õige I/O-ajastaja. Kaasaegsed tuumad on vaikimisi mõistlikult seadistatud, kuid seda tasub kontrollida. NVMe ja SSD-de puhul seadistage ajastaja none. Seade haldab järjekordi riistvaras paremini kui tuum:

echo none > /sys/block/nvme0n1/queue/scheduler

Segatud töökoormustega HDD-de puhul mq-deadline on tavaline valik.

Kinnitage noatime'iga. Iga lugemine uuendab vaikimisi faili viimase juurdepääsu ajamärget, tekitades iga lugemise kohta kirjutuse. Lugemisintensiivsetes failisüsteemides on see tarbetu I/O. Lisage noatime mount-valikutesse /etc/fstab:

UUID=... /data ext4 defaults,noatime 0 2

Häälestage kirjutamisjärgsust (writeback) järskude kirjutuskoormuste jaoks. Serverites, kus on palju RAM-i, lubavad vaikimisi määratud määrdunud lehekülgede künnised lehekülje vahemälul koguneda gigabaitide viisi kirjutamata andmeid, mis seejärel tühjendatakse ühe suure takistusega. Alandage künniseid /etc/sysctl.conf , et seda siluda:

vm.dirty_ratio = 10
vm.dirty_background_ratio = 5

Kõvaketas ise ei ole tavaliselt probleem. Kui iostat näitab kõrget IOPS-i ja madalat läbilaskevõimet, teeb töökoormus juhuslikku sisend-väljundoperatsiooni andmetega, mis võiksid olla järjestikused, või teostab palju väikeseid kirjutamistoiminguid, mida võiks teha partiidena. Vaadake rakendust enne, kui süüdistate riistvara.

Kui teete salvestusmahukaid töökoormusi serveril, kus võrk võib kettast kiiremini töötada, annavad FDC NVMe-põhised pühendatud serverid teile ruumi eespool nimetatud häälestuste produktiivseks rakendamiseks.

Blogi

Sel nädalal esile tõstetud

Rohkem artikleid
Timmitud profiilid Linuxi serverite töökoormuse optimeerimiseks

Timmitud profiilid Linuxi serverite töökoormuse optimeerimiseks

Kuidas valida, rakendada ja kohandada häälestatud profiile GPU, andmebaasi ja suure ribalaiusega Linuxi serverite jaoks, koos näidete ja Ansible'i kasutuselevõtunippidega.

16 min lugemine - 9. juuni 2026

Linux OOM Killer Tuning for VPS: Praktiline juhend

12 min lugemine - 8. juuni 2026

Rohkem artikleid
background image

Kas teil on küsimusi või vajate kohandatud lahendust?

icon

Paindlikud võimalused

icon

Ülemaailmne haare

icon

Kohene kasutuselevõtt

icon

Paindlikud võimalused

icon

Ülemaailmne haare

icon

Kohene kasutuselevõtt