Утилита 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 может показать больше информации о нагрузке на дисковую подсистему в целом.