- Useful Tools to Monitor and Debug Disk I/O Performance in Linux
- 1. iostat – Shows Device Input and Output Statistics
- 2. sar – Show Linux System Activity
- 3. iotop – Monitor Linux Disk I/O Usage
- Кунг-фу стиля Linux: мониторинг дисковой подсистемы
- Утилита iotop
- Утилита iostat
- Утилита duf
- Вывод сведений об открытых файлах с помощью lsof
- Дополнительный инструмент: atop
- Итоги
Useful Tools to Monitor and Debug Disk I/O Performance in Linux
A key performance metric to monitor on a Linux server is disk I/O (input/output) activity, which can significantly impact several aspects of a Linux server, particularly the speed of saving to or retrieval from disk, of files or data (especially on database servers). This has a ripple effect on the performance of applications and services.
1. iostat – Shows Device Input and Output Statistics
iosat is one of the many terminal-based system monitoring utilities in the sysstat package, which is a widely used utility designed for reporting CPU statistics and I/O statistics for block devices and partitions.
To use iostat on your Linux server, you need to install the sysstat package on your Linux system by running the applicable command for your Linux distribution.
$ sudo apt install sysstat [On Debian, Ubuntu and Mint] $ sudo yum install sysstat [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux] $ sudo emerge -a app-admin/sysstat [On Gentoo Linux] $ sudo apk add sysstat [On Alpine Linux] $ sudo pacman -S sysstat [On Arch Linux] $ sudo zypper install sysstat [On OpenSUSE]
To show a simple device utilization report, run iostat with the -d command line option. Usually, the first report provides statistics about the time since the system startup (boot time) and each subsequent report is concerned with time since the previous report.
Use the -x for an extended statistics report and the -t flag to enable time for each report. Besides, If you wish to eliminate devices without any activity in the report output, add the -z flag:
# iostat -d -t OR # iostat -d -x -t
To display statistics in kilobytes per second as opposed to blocks per second add the -k flag, or use the -m flag to display stats in megabytes per second.
# iostat -d -k OR # iostat -d -m
iostat can also display continuous device reports at x second intervals. For example, the following command displays reports at two-second intervals:
Related to the previous command, you can display n number of reports at x second intervals. The following command will display 10 reports at two-second intervals. Alternatively, you can save the report to a file for later analysis:
# iostat -d 2 10 OR # iostat -d 2 10 > disk_io_report.txt &
For more information about the report columns, read the iostat man page:
2. sar – Show Linux System Activity
sar is another useful utility that ships with the sysstat package, intended to collect, report, or save system activity information. Before you can start using it, you need to set it up as follows.
First, enable it to collect data in the /etc/default/sysstat file.
Look for the following line and change the value to “true” as shown.
Next, you need to reduce the data collection interval defined in the sysstat cron jobs. By default, it is set to every 10 minutes, you can lower it to every 2 minutes.
You can do this in the /etc/cron.d/sysstat file:
Save the file and close it.
Finally, enable and start the sysstat service using the following systemctl command:
# systemctl enable --now sysstat.service # systemctl enable sysstat.service
Next, wait for 2 minutes to start viewing sar reports. Use the sar command and the -b command line option to report I/O and transfer rate statistics and -d to report activity for each block device as shown.
3. iotop – Monitor Linux Disk I/O Usage
Similar to top monitoring tool in terms of design, iotop is a simple utility that enables you to monitor disk I/O activity and usage on a per-process basis.
You can get it installed on your Linux server as follows (remember to run the appropriate command for your Linux distribution):
$ sudo apt install iotop [On Debian, Ubuntu and Mint] $ sudo yum install iotop [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux] $ sudo emerge -a sys-processs/iotop [On Gentoo Linux] $ sudo apk add iotop [On Alpine Linux] $ sudo pacman -S iotop [On Arch Linux] $ sudo zypper install iotop [On OpenSUSE]
To monitor per-process I/O activity, you can run iotop without any arguments as follows. By default, the delay between iterations is 1 second. You can change this using the -d flag.
iotop will by default display all threads of a process. To change this behavior so that it only shows processes, use the -P command line option.
Also, using the -a option, you can instruct it to display accumulated I/O as opposed to showing bandwidth. In this mode, iotop shows the amount of I/O processes performed since iotop was invoked.
That’s all we had for you! We would like to know your thoughts about this guide or the above tools. Leave a comment via the feedback form below.
You can also inform us about tools that you think are missing in this list, but deserve to appear here.
Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Если, работая в Linux, нужно быстро взглянуть на сведения о работающих процессах — можно воспользоваться командой top , или — что немного лучше — командой htop . А как быть, если надо получить данные о состоянии дисковой подсистемы? Решить эту задачу помогут специализированные инструменты, некоторые из которых распространены далеко не так широко, как top .
Утилита iotop
Утилита iotop очень сильно похожа на top . Она выводит сведения об общем и текущем количестве операций обращения к диску для файловой системы. Кроме того, она сообщает о том, что именно интенсивнее всего нагружает диск. Экран iotop , на первый взгляд, переполнен информацией.
Вот совет по работе с этой утилитой. Если взглянуть на нижнюю часть экрана — там можно найти некоторые команды, вызываемые нажатиями на клавиши клавиатуры. Например, клавиша O скрывает (или отображает) все неактивные процессы. Это позволяет немного улучшить внешний вид сведений, выводимых iotop .
Сведения об использовании дисковой подсистемы активными процессами
Того же эффекта можно добиться, запустив iotop с ключом -o . Обратите внимание на то, что другие клавиатурные команды позволяют, например, выводить сведения о потоках, а не о процессах, менять режим вывода данных, задавать классы и приоритеты ввода-вывода процессов ( ionice ).
Утилита iostat
Если вас больше интересуют данные, относящиеся к самим дискам, а не к процессам или потокам, можете попробовать команду iostat . Она тоже выводит некоторые данные о процессах, но они представлены в обобщённом виде.
Эта команда запускается, собирает данные и выводит их, не обновляя в режиме реального времени. Если нужно периодически её перезапускать — можно, при её запуске, указать промежуток времени между получениями новых отчётов, и, что необязательно, общее количество перезапусков. При этом, если нужно, можно воспользоваться ключом командной строки -t для получения сведений о времени.
Правда, это приводит к прокрутке выходных данных программы. Если вы занимаетесь мониторингом дисковой активности, то, возможно, вам лучше подойдёт такой вариант запуска iostat :
Если запустить утилиту с ключом -x — можно получить более подробные сведения о дисках. Флаг -z позволяет отключить вывод сведений об устройствах, на которых нет данных.
Утилита duf
Вы, вероятно, не найдёте в своей системе утилиту duf . Если это так — можете установить её с GitHub. Те же результаты, правда, можно получить, воспользовавшись df и ещё некоторыми командами, но преимущество duf заключается в том, что эта программа представляет данные в удобном для просмотра виде.
При запуске этой утилиты можно воспользоваться опциями командной строки, которые позволяют скрывать устройства, задавать ширину таблиц, выводимых на экране, по-разному сортировать выводимые данные. Ещё можно указать максимальную ширину таблиц, генерируемых программой. Подробности о работе с duf можно узнать, запустив утилиту с ключом —help .
Вывод сведений об открытых файлах с помощью lsof
Если нужно узнать о том, какие именно файлы открыты в системе, сделать это можно с помощью команды lsof . Она выводит подробную информацию, а в работающих системах обычно открыто очень много файлов. Поэтому lsof обычно используют, указывая имя файла, или комбинируя этот приём с grep . Это позволяет узнать сведения только о том, что нужно.
При использовании lsof нужно помнить о том, что шаблоны тут, по умолчанию, не работают. Поэтому следующая команда выведет лишь сведения о директории /home/alw . А вот, например, сведения о процессах, которые открыли какие-нибудь файлы в этой директории, такая команда не выведет.
Для того чтобы это изменить, можно запустить lsof с ключом -d или -D . Ключ, представленный буквой в нижнем регистре, приводит к поиску директорий и файлов на верхнем уровне. Ключ -D выполняет рекурсивный поиск. Эта команда поддерживает и много других опций, которые можно применять, например, для поиска файлов, открытых пользователем с заданным ID, или для поиска по заданному имени команды.
Дополнительный инструмент: atop
Одной из замен команды top является atop . Хотя эта команда и не нацелена исключительно на мониторинг дисковых операций, она даёт сведения о том, как процессы пользуются дисками, и, кроме того, предоставляет некоторые сводные сведения. Обычно после запуска atop в верхней части формируемого ей вывода имеется строка DSK , в которой присутствуют сведения о диске. Эти данные, по мере приближения уровня использования диска к 100%, выделяются красным цветом. Данные, выводимые в нижней части, похожи на те, что даёт команда top .
Для сортировки процессов по уровню использования дисков можно воспользоваться клавишей D . Это — полезный инструмент.
Итоги
Для того чтобы получить сведения о дисках в Linux можно применить десятки различных инструментов. Собственно говоря, нечто подобное справедливо и для решения многих других задач. Если вам интересны подробности о том, что именно выводит htop (похожие данные формируют, кроме того, top и atop ) — взгляните на этот материал.
Как вы мониторите дисковую подсистему в Linux?