Утилита iostat

Утилита iostat, также как iotop показывает информацию о нагрузке на дисковую подсистему. Но iostat показывает лишь общую нагрузку.

Об утилите

Утилита iostat используется для мониторинга нагрузки на дисковую подсистему. Она создает отчеты, первый отчет генерируется статистикой с момента загрузки системы и до выполнения команды. Но каждый последующий отчет охватывает время с момента предыдущего отчета.

Отчет состоит из статистики по CPU, и статистики для каждого диска или раздела. Эта утилита входит в пакет sysstat, который вначале нужно установить:

$ sudo apt install sysstat

Работа с iostat

Если выполнить эту команду без дополнительных опций, то вы увидите 1 отчет:

$ iostat
Linux 5.15.0-48-generic (ubu-22)        17.10.2022      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,02    0,01    0,03    0,02    0,00   99,93

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
loop0             0,00         0,01         0,00         0,00       2634          0          0
loop1             0,00         0,00         0,00         0,00        930          0          0
loop2             0,00         0,00         0,00         0,00       1148          0          0
loop3             0,00         0,00         0,00         0,00       1139          0          0
loop4             0,00         0,00         0,00         0,00        360          0          0
loop5             0,00         0,11         0,00         0,00      40389          0          0
loop6             0,00         0,09         0,00         0,00      30395          0          0
loop7             0,00         0,00         0,00         0,00         14          0          0
sda               1,10         7,65        12,90        55,45    2698466    4548696   19560200
sr0               0,00         0,00         0,00         0,00          1          0          0

Так как этот пример был выполнен на Ubuntu 11, то здесь много устройств loop, которые монтируются в различные подкаталоги /snap/. Я, в этом курсе, ничего про пакеты приложений snap не рассказываю. Но если коротко, это такие пакеты приложений, которые распространяются как файловые системы. Поэтому, когда вы устанавливаете snap пакет, то у вас скачивается пакет (файл в виде файловой системы). И затем, этот пакет монтируется в определённую точку монтирования. В Debian 11 вы не увидите таких разделов, так как там snap по умолчанию не используется.

Теперь возвратимся к выводу iostat. Эта утилита отображает информацию в разных строках. Каждая строка имеет свой набор полей.

Выводимая информация

В первой строке вы увидите информацию об установленной системе:

Linux 5.15.0-48-generic (ubu-22)        17.10.2022      _x86_64_        (2 CPU)

Здесь мы видим версию ядра, hostname, текущую дату, архитектуру и количество ядер.

Во второй строке мы видим информацию об использовании процессора:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,02    0,01    0,03    0,02    0,00   99,93
  • %user — процент времени когда процессор обрабатывал пользовательские процессы;
  • %nice — процент времени когда процессор был занят процессами с пониженным приоритетом;
  • %system — процент времени когда процессор был занят процессами ядра;
  • %iowait — процент времени в течении которого процессор ожидал систему ввода вывода;
  • %steal — процент времени в течении которого процессор не был доступен виртуальной машине, будет расти если виртуальной машине выделить больше ядер, чем есть физически есть у гипервизора;
  • %idle — процент времени когда процессор простаивал.

В следующих строках показана нагрузка на все смонтированные файловые системы. Например, вот строка показывающая нагрузку на реальный диск (sda):

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda               1,10         7,65        12,90        55,45    2698466    4548696   19560200

Поля с информацией:

  • Device — имя устройства.
  • tps — транзакций в секунду. Несколько логических транзакций могут быть объединены в одну.
  • Blk_read/s (kB_read/s, MB_read/s) — объем данных, считываемых с устройства. Может измеряться в блоках (512 байт), килобайтах или мегабайтах.
  • Blk_wrtn/s (kB_wrtn/s, MB_wrtn/s) — объем данных, записываемых на устройство.
  • Blk_read (kB_read, MB_read) — общее количество прочитанных блоков (килобайтов, мегабайтов);
  • Blk_wrtn (kB_wrtn, MB_wrtn) — общее количество записанных блоков (килобайтов, мегабайтов).

Если запустить iostat с опцией -x, то увидим больше информации:

  • r/s — число запросов на чтение.
  • w/s — число запросов на запись.
  • rsec/s (rkB/s, rMB/s) — число секторов (kB, MB), считываемых в секунду.
  • wsec/s (wkB/s, wMB/s) — число секторов (kB, MB), записываемых в секунду.
  • rrqm/s — число запросов на чтение, которые были поставлены в очередь за секунду.
  • wrqm/s — число запросов на запись, которые были поставлены в очередь за секунду.
  • %rrqm — процент запросов на чтение перед отправкой на устройство.
  • %wrqm — процент запросов на запись перед отправкой на устройство.
  • r_await — среднее время (в миллисекундах) для запросов на чтение. Включает время, потраченное в очереди и на обслуживание.
  • w_await — среднее время (в миллисекундах) для запросов на запись. Включает время, потраченное в очереди, и на обслуживание.
  • aqu-sz — средняя длина очереди запросов, отправленных устройству.
  • rareq-sz — средний размер (в килобайтах) запросов на чтение, отправленных устройству.
  • wareq-sz — средний размер (в килобайтах) запросов на запись, отправленных устройству.
  • avgqu-sz — средняя длина очереди запросов.
  • %util — использование полосы пропускания для устройства. Для RAID и SSD не актуально.

Дополнительные опции

Как вы поняли, без опций утилита iostat показывает статистику за период, от времени включения сервера и до выполнения этой команды.

Двумя числами, после команды, мы можем указать интервал повторения и количество повторений выполнения этой команды. Также мы можем указать конкретный диск, чтобы не получать информацию по всем.

Например, каждые 2 секунды, 4 отчета для устройства sda:

$ iostat 2 4 sda
Linux 5.15.0-48-generic (ubu-22)        17.10.2022      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,02    0,01    0,03    0,02    0,00   99,93

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda               1,10         7,61        12,84        55,15    2698878    4555096   19560200


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,00    0,00    0,00    0,00    0,00  100,00

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda               0,00         0,00         0,00         0,00          0          0          0


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,00    0,00    0,00    0,25    0,00   99,75

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda               1,00         0,00         6,00         0,00          0         12          0


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,00    0,00    0,00    0,00    0,00  100,00

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda               0,00         0,00         0,00         0,00          0          0          0

Если не указать количество отчетов, то вывод будет бесконечным.

Также мы можем использовать дополнительные опции:

  •  — информация только по cpu;
  • -d — информация только по дискам;
  • -h — информация в удобном для человеке формате;
  • -k — информация в килобайтах;
  • -m — информация в мегабайтах;
  • -p — показать разделы диска;
  • p <устройство> — выводить информацию только по определенному устройству (sda1);
  • -t — выводить время в которое сформировался отчет;
  • -x — вывести расширенную статистику;
  • -y — пропустить первый отчет, от начала загрузки системы;
  • -z — не выводить устройства на которых не было операций ввода вывода.

Например, будем получать информацию каждую секунду, в течении 6 раз. А также, получать информацию будем только по дискам, в удобном для человека виде, и пропустим первый отчет. И выводить информацию будет только по диску sda:

$ iostat 1 6 -dhy sda
Linux 5.15.0-48-generic (ubu-22)        17.10.2022      _x86_64_        (2 CPU)

      tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd Device
     0,00         0,0k         0,0k         0,0k       0,0k       0,0k       0,0k sda

      tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd Device
     0,00         0,0k         0,0k         0,0k       0,0k       0,0k       0,0k sda

      tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd Device
     0,00         0,0k         0,0k         0,0k       0,0k       0,0k       0,0k sda

      tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd Device
     0,00         0,0k         0,0k         0,0k       0,0k       0,0k       0,0k sda

      tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd Device
     2,00         0,0k        24,0k         0,0k       0,0k      24,0k       0,0k sda

      tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd Device
     4,00         0,0k        16,0k         0,0k       0,0k      16,0k       0,0k sda

Итог

В этой статье мы познакомились с утилитой iostat. В отличии от iotop она не может показать информацию в разрезе процессов. Но зато iostat может показать больше информации о нагрузке на дисковую подсистему в целом.


Оставьте комментарий