Monitorowanie I/O dysku serwera: iostat i dstat – poradnik | INTROSERV
EUR
european

EUR

usa

USD

Poland Pl
Ex. VAT Ex. VAT 0%

Monitorowanie I/O dysku za pomocą iostat i dstat

Wprowadzenie

Monitorowanie operacji wejścia-wyjścia dysku (disk I/O) jest jednym z kluczowych zadań podczas eksploatacji serwerów w infrastrukturze hostingowej. Podsystem dyskowy bezpośrednio wpływa na wydajność usług internetowych, baz danych, maszyn wirtualnych, kontenerów i zadań w tle. Nawet przy wystarczającej ilości pamięci RAM i wolnych zasobach procesora przeciążony lub wolny dysk może stać się wąskim gardłem całego systemu.

Niniejszy podręcznik jest przeznaczony dla administratorów systemów, inżynierów DevOps i właścicieli serwerów. Omawia narzędzia iostat i dstat, zasady ich działania, interpretację metryk oraz praktyczne podejście do wyszukiwania wąskich gardeł I/O dysku w środowisku hostingowym.

Informacje ogólne i zasady działania

I/O dysku w infrastrukturze serwerowej

Operacje wejścia-wyjścia dysku obejmują odczyt i zapis danych na urządzeniach blokowych. W rzeczywistych scenariuszach hostingowych obciążenie podsystemu dyskowego najczęściej generują:

  • bazy danych (MySQL, MariaDB, PostgreSQL);
  • aplikacje internetowe z treścią dynamiczną;
  • usługi pocztowe;
  • tworzenie kopii zapasowych i synchronizacja danych;
  • logowanie;
  • swap i pliki tymczasowe;
  • skrypty użytkowników i zadania cron.

Wąskie gardła mogą wynikać z wolnych urządzeń pamięci masowej, silnej rywalizacji między procesami, nieoptymalnych planistów I/O, nieprawidłowego działania pamięci podręcznej lub specyfiki wirtualizacji.

Przeznaczenie iostat i dstat

iostat to narzędzie z pakietu sysstat przeznaczone do zbierania szczegółowych statystyk obciążenia procesora i urządzeń dyskowych. Głównym zadaniem iostat jest pokazanie, jak intensywnie wykorzystywany jest dany dysk, czy istnieje kolejka żądań oraz jaki jest średni czas oczekiwania operacji.

dstat to wszechstronne narzędzie monitorujące, które wyświetla statystyki w czasie rzeczywistym dla kilku podsystemów jednocześnie: procesora, pamięci, dysku, sieci, procesów. Pozwala skorelować aktywność dysku z ogólnym obciążeniem serwera i jest wygodne do szybkiej diagnostyki.

Tip

Narzędzia te się uzupełniają: iostat daje dokładny obraz na poziomie urządzenia, a dstat zapewnia kontekst całego systemu.

Wymagania wstępne

Przed rozpoczęciem analizy muszą być spełnione następujące warunki:

  • System operacyjny Linux (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
  • Dostęp do serwera przez SSH.
  • Uprawnienia roota lub możliwość wykonywania poleceń przez sudo.

Sprawdzenie wersji systemu operacyjnego:

cat /etc/os-release

Instalacja niezbędnych pakietów:

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

Sprawdzenie działania sysstat:

systemctl status sysstat

Jeśli usługa jest aktywna, zostaną wyświetlone odpowiednie informacje:

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

Przegląd i analiza krok po kroku

Podstawowa analiza dysku za pomocą iostat

Narzędzie iostat służy do oceny obciążenia procesora i podsystemu dyskowego oraz do wykrywania opóźnień i kolejek I/O.

Składnia:

sudo iostat [options] [interval] [count]

Najczęściej używane parametry:

  • -x - statystyki rozszerzone;
  • -d - wyłącznie dane dotyczące dysków;
  • -k - wyjście w kilobajtach;
  • -p - statystyki dla partycji lub konkretnego urządzenia.

Przykład podstawowy:

sudo iostat -x

Analiza dynamiczna:

sudo iostat -xk 5 3

Interwał i liczba próbek pozwalają śledzić zmiany obciążenia w czasie, zamiast średniego stanu od uruchomienia systemu.

Przykładowe wyjście iostat

Kluczowe metryki procesora:

  • %iowait - odsetek czasu, w którym procesor pozostaje bezczynny, oczekując na zakończenie operacji I/O. Wzrost tej metryki wskazuje na wpływ dysku na ogólną wydajność.
  • %steal - istotne dla serwerów wirtualnych; pokazuje „skradziony” czas procesora.

Kluczowe metryki dysku:

  • %util - odsetek czasu, w którym dysk był zajęty. Wartości stale przekraczające 80-90% wskazują na nasycenie urządzenia.
  • r_await - średni czas (ms) zakończenia operacji odczytu (wraz z czasem oczekiwania w kolejce).
  • w_await - średni czas (ms) zakończenia operacji zapisu (wraz z czasem oczekiwania w kolejce).
  • aqu-sz - (avg queue size) średnia długość kolejki żądań do dysku. Wartość > 1 oznacza już tworzenie się kolejki. Wartość > 2-4 dla HDD / > 1-2 dla SSD jest oznaką, że dysk nie nadąża za obciążeniem.

Różnica między await a svctm pokazuje, czy opóźnienie jest powodowane przez kolejkę, a nie przez fizyczną szybkość dysku.
Jeśli await tylko nieznacznie przewyższa svctm (różnica < 20-30%), opóźnienia wynikają głównie z samego dysku (wolny fizyczny odczyt/zapis).
Jeśli await jest znacznie większy niż svctm (różnica > 50-100%), główne opóźnienie powoduje kolejka żądań (aqu-sz będzie wysoki), co wskazuje na przeciążenie dysku wieloma równoległymi żądaniami.

W nowoczesnych wersjach iostat (jak w przykładzie) svctm nie jest wyświetlany, ponieważ jego obliczanie jest niewiarygodne. Do analizy stosuje się kombinację await + aqu-sz: wysoki await przy niskim aqu-sz (~0) wskazuje na wolny dysk; wysoki await przy wysokim aqu-sz (>1) wskazuje na przeciążenie dysku żądaniami.

Analiza całościowego obrazu za pomocą dstat

dstat służy do obserwacji systemu w czasie rzeczywistym i korelowania obciążenia dysku z innymi zasobami.

Przykłady poleceń:

dstat -d dstat --disk-util dstat -rd --disk-util dstat -D vda,sda

Przykład uruchomienia z interwałem:

dstat -rd --disk-util 1 5

Podczas analizy należy zwrócić uwagę na:

  • wzrost iowait procesora;
  • szczyty odczytu lub zapisu;
  • jednoczesną aktywność sieciową i dyskową (kopie zapasowe, synchronizacja).

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

Porównanie dstat i iostat:

Kryterium iostat dstat
Dokładność danych Wysoka Wysoka
Tryb czasu rzeczywistego Ograniczony Doskonały
Dane historyczne Tak (sar) Nie
Kolorowe wyjście Nie Tak
Rozszerzalność Nie Wtyczki
Eksport do CSV Nie Tak
Obciążenie procesora Niskie Średnie

Info

dstat jest szczególnie przydatny przy krótkotrwałych skokach obciążenia, które nie zawsze są widoczne w iostat.

Wykrywanie wąskich gardeł I/O dysku

Do szybkiej diagnostyki służą następujące polecenia:

sudo iostat -mx 2 sudo iostat -p /dev/vda 2 5 sar -d 1 5

Typowe oznaki problemu:

  • %util powyżej 80% przez dłuższy czas;
  • await powyżej 20-30 ms dla SSD lub powyżej 50-100 ms dla HDD;
  • aqu-sz większe niż 2-3, co wskazuje na narastanie kolejki.

W przykładzie użyto dysku /dev/vda – jest to dysk wirtualny (VirtIO) na serwerze wirtualnym.

Na serwerach fizycznych i w innych środowiskach dyski mogą mieć inne nazwy:

  • /dev/sdX (np. /dev/sda) - zwykłe dyski SATA/SAS/USB
  • /dev/nvmeXnY (np. /dev/nvme0n1) - dyski NVMe
  • /dev/vdX - dyski wirtualne

Identyfikacja procesów powodujących duże obciążenie I/O dysku

Po stwierdzeniu za pomocą iostat i dstat przeciążenia podsystemu dyskowego kolejnym krokiem jest zidentyfikowanie konkretnych procesów inicjujących intensywne operacje odczytu lub zapisu. Analiza na poziomie urządzenia bez ustalenia źródła obciążenia nie pozwala na podjęcie właściwych działań naprawczych.

Użycie iotop

Podstawowym narzędziem do wyszukiwania procesów aktywnie korzystających z dysku jest iotop.

sudo iotop -ao

Parametry polecenia:

-a - wyświetla statystyki skumulowane od momentu uruchomienia procesu, co pomaga wykryć zadania w tle z długotrwałymi operacjami I/O;

-o - pokazuje tylko te procesy, które w danej chwili wykonują operacje I/O.

Przykładowe wyjście:

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

W wyjściu iotop szczególną uwagę należy zwrócić na pola DISK READ i DISK WRITE oraz na procentowy udział czasu I/O. Zazwyczaj źródłem obciążenia są procesy baz danych, procesy kopii zapasowych, procesy synchronizacji plików lub skrypty użytkowników.

Użycie pidstat do analizy I/O w podziale na procesy

Do bardziej sformalizowanej i powtarzalnej analizy można użyć pidstat, który jest częścią pakietu sysstat.

pidstat -d 1

To polecenie wyświetla statystyki I/O dysku dla każdego procesu w odstępach jednosekundowych. Jest to wygodne do wykrywania krótkotrwałych skoków aktywności i korelowania ich z innymi metrykami systemu.

Info

pidstat jest szczególnie przydatny w sytuacjach, gdy obciążenie pojawia się okresowo i nie zawsze jest rejestrowane przez iotop.

Użycie lsof do analizy aktywności plików

W przypadkach, gdy trzeba ustalić, z jakimi konkretnymi plikami lub katalogami pracuje proces, używa się narzędzia lsof.

lsof +D /path

Gdzie /path to konkretny katalog, w którym należy zidentyfikować aktywne pliki i procesy. Może to być na przykład katalog bazy danych, katalog kopii zapasowych lub obszar plików tymczasowych.

Polecenie pozwala ustalić, które procesy aktualnie przetrzymują deskryptory plików i wykonują operacje w podanej ścieżce, co jest szczególnie przydatne przy analizie obciążenia generowanego przez aplikacje.

Analiza kontekstu obciążenia

Zidentyfikowanie procesu o dużej aktywności dyskowej nie jest celem ostatecznym. Administrator musi ocenić kontekst jego działania:

  • czy obciążenie jest oczekiwane dla danej usługi;
  • czy proces jest uruchamiany w odpowiednim czasie (np. kopie zapasowe w godzinach szczytu);
  • czy można zmienić harmonogram lub parametry pracy;
  • czy dopuszczalne jest obniżenie priorytetu I/O.

Takie podejście pozwala odróżnić obciążenie normalne od problematycznego i wybrać właściwą metodę optymalizacji.

Weryfikacja poprawności analizy

Poprawność przeprowadzonej analizy potwierdza się, jeśli:

  • szczyty %util, await lub aqu-sz w iostat pokrywają się w czasie z aktywnością procesów w iotop lub pidstat;
  • wzrost iowait w dstat pokrywa się z operacjami dyskowymi, a nie z obciążeniem procesora;
  • powtórne pomiary wykazują powtarzalny wzorzec obciążenia.

W celu gromadzenia danych i późniejszej analizy zaleca się stosowanie logowania:

sar -d 1 100 > io.log

Pozwala to zarejestrować zachowanie podsystemu dyskowego w określonym okresie i wykorzystać dane podczas badania incydentów.

Typowe błędy i cechy eksploatacji

W praktyce eksploatacji serwerów hostingowych najczęściej występują następujące problemy:

  • uruchamianie kopii zapasowych i synchronizacji danych w godzinach szczytu;
  • intensywne użycie swapu przy niewystarczającej ilości pamięci RAM;
  • planista I/O nieodpowiedni dla typu dysku;
  • brak priorytetyzacji zadań w tle.

Aby ograniczyć wpływ procesów w tle na wydajność, zaleca się użycie narzędzia ionice do zarządzania priorytetem I/O procesu, co pozwala zmniejszyć wpływ zadań w tle na responsywność systemu.

Przykład użycia:

ionice -c3 rsync /source /destination

Główne priorytety:

  • -c1 (realtime) - najwyższy priorytet. Stosowany do zadań krytycznych pod względem opóźnień. Może całkowicie zablokować inne procesy.
  • -c2 (best-effort) - domyślny dla większości procesów. Pozwala dostosować poziom priorytetu (od 0 (wysoki) do 7 (niski)).
  • -c3 (idle) - tło. Proces uzyskuje dostęp do dysku tylko wtedy, gdy nie korzystają z niego żadne inne procesy. Bezpieczny i zalecany dla operacji w tle (kopie zapasowe, synchronizacja danych).

W tym przykładzie proces rsync działa z najniższym priorytetem I/O, co minimalizuje jego wpływ na podstawowe operacje systemu. Użycie ionice pozwala zminimalizować wpływ procesów w tle bez konieczności ich całkowitego wyłączania.

Podsumowanie

Monitorowanie I/O dysku jest integralną częścią utrzymania wydajności i stabilności infrastruktury serwerowej. Narzędzia iostat i dstat pozwalają wykrywać sytuacje przeciążenia i oceniać stan podsystemu dyskowego, natomiast narzędzia takie jak iotop, pidstat i lsof pomagają zidentyfikować konkretne procesy i charakter ich obciążenia.

Regularne stosowanie opisanego podejścia, prawidłowa interpretacja metryk i zarządzanie priorytetami I/O pomagają skrócić czasy odpowiedzi usług, zwiększyć przewidywalność obciążenia i zapewnić zgodność z wymaganiami SLA. W dalszej perspektywie metodykę tę można rozszerzyć o scentralizowany monitoring i automatyzację analizy obciążenia I/O.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • kingdom
  • germany
  • Español
  • French
  • Hrvatska
  • Italiano
  • Poland
  • Slovenski
  • ukraine
  • Türkçe
  • Русский
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA