- Как отследить, какой процесс создаёт нагрузку на диск
- iotop — аналог top для отслеживания нагрузки на диск в реальном времени
- pidstat — вывод статистики для задач Linux
- iostat — статистика использования устройств и разделов дисков
- Связанные статьи:
- Как просмотреть нагрузку на диск в Linux
- Команда iostat
- Команда pidstat
Как отследить, какой процесс создаёт нагрузку на диск
Чрезмерная нагрузка на диск может быть вызвана такой причиной как заражение вирусом либо неправильная настройка программ. В любом случае, необходимо начать с идентификации процесса (программы), которая больше всего делает операций чтения и записи на диск.
iotop — аналог top для отслеживания нагрузки на диск в реальном времени
Программа top позволяет увидеть, какие процессы потребляют больше всего процессорного времени и оперативной памяти, но ничего не говорит об использовании процессами диска, об операциях чтения и записи на диск.
Программа iotop показывает скорость чтения и записи на диск, также процент использования файла подкачки каждым процессом.
Для установки iotop в Debian, Linux Mint, Kali Linux, Ubuntu и их производные выполните команду:
Для установки iotop в Arch Linux, BlackArch, Manjaro и их производные выполните команду:
Программа требует повышенных привилегий для запуска:
В выводе программы присутствуют следующие столбцы:
- TID — идентификатор процесс
- PRIO — приоритет процесса
- USER — пользователь, который является владельцем процесса
- DISK READ — скорость чтения диска
- DISK WRITE — скорость записи на диск
- SWAPIN — процент использования файла подкачки
- IO> — процент от всех операций ввода-вывода
- COMMAND — запустившая процесс команда
С помощью курсорных клавиш вправо (→) и влево (←) вы можете переключаться между столбцами, одновременно выбирая, по какому из них будет выполнятся сортировка.
С помощью кнопок «Home» и «End» вы можете переключаться между крайними столбцами.
Нажатие любой клавиши обновит окно.
Для выхода нажмите «q».
Нажав клавишу «o» вы переключитесь на показ только активных процессов, то есть только процессов, которые записывают и считывают данные с постоянного хранилища. Такой же результат вы можете получить запустив программу с опцией -o:
Повторное нажатие клавиши «o» вернёт показ всех процессов.
По умолчанию используется сортировка по убыванию, с помощью кнопки «r» вы можете переключаться между сортировкой по убыванию и по возрастанию.
Кнопка «p» переключает между показами процессов и потоков.
По умолчанию показываются скорости чтения и записи, с помощью кнопки «a» вы можете переключиться на показ общего количества записанных и прочитанных данных.
У iotop имеется несколько опций, которые позволяют управлять поведением программы, например следующая команда будет работать в пакетном режиме (-b), показывая общее количество записанных и прочитанных данных (-a) только для активных процессов (-o), к выводимым данным будет добавляться метка времени (-t), из всех процессов будет отфильтрована только информация о systemd-journald (grep ‘systemd-journald’):
iotop -b -a -o -t | grep 'systemd-journald'
pidstat — вывод статистики для задач Linux
Пакет sysstat содержит сразу две утилиты с помощью которых можно собрать статистику использования диска процессами:
Для установки pidstat в Debian, Linux Mint, Kali Linux, Ubuntu и их производные выполните команду:
Для установки pidstat в Arch Linux, BlackArch, Manjaro и их производные выполните команду:
Следующая команда будет выводить накопленную статистику за каждые 20 секунд, будут показаны только активные процессы (сделавшие операции чтения и записи на диск за указанный интервал), также будет показана полная команда, запустившая процесс. Для более полной статистики запустите программу с повышенными привилегиями:
Каждая строка будет иметь следующие столбцы:
- Метка времени
- UID — числовой идентификатор пользователя
- PID — идентификатор процесса
- kB_rd/s — количество килобайт в секунду которые были прочитаны по инициативе указанной задачи
- kB_wr/s — количество килобайт в секунду которые были (или должны были быть) записаны по инициативе указанной задачи
- kB_ccwr/s — количество килобайт, запись которых на диск была отменена задачей. Это может произойти, когда задача усекает грязный кэш страниц. В этом случае некоторые операции ввода-вывода, для которых была учтена другая задача, не будут выполняться
- iodelay — задержка ввода-вывода
- Command — команда, запустившая задачу
iostat — статистика использования устройств и разделов дисков
Утилита iostat также включена в пакет sysstat. Как можно догадаться из названия программы, она создаёт отчёты по статистике ввода/вывода для устройств и разделов. Её особенностью является то, что она показывает обобщённую статистику для всей системы, а также для отдельных носителей, не разбивая её на процессы. Программа iostat может пригодиться когда необходимо ответить на вопрос: «какой из постоянных носителей подвергается наибольшей нагрузке?».
Запуск программы без опций
выведет два блока информации:
Раздел со статистикой использований устройств содержит следующие разделы:
- Device — имя устройства или раздела, как оно указано в /dev
- tps — указывает количество передач в секунду, отправленных на устройство. Передача — это запрос ввода-вывода к устройству. Несколько логических запросов можно объединить в один запрос ввода-вывода к устройству. Размер перевода является неопределённой величиной
- kB_read/s — указывает объём данных, считанных с устройства, выраженный в количестве блоков (килобайт, мегабайт) в секунду. Блоки эквивалентны секторам и поэтому имеют размер 512 байт
- kB_wrtn/s — указывает объём данных, записываемых на устройство, выраженный в количестве блоков (килобайт, мегабайт) в секунду
- kB_dscd/s — указывает количество данных, отбрасываемых устройством, выраженное в количестве блоков (килобайт, мегабайт) в секунду
- kB_read — общее количество прочитанных блоков (килобайт, мегабайт)
- kB_wrtn — общее количество записанных блоков (килобайт, мегабайт)
- kB_dscd — общее количество отброшенных блоков (килобайт, мегабайт)
Отчёт выводит для всей системы с момента её загрузки.
Поскольку по умолчанию данные выводятся в килобайтах, а современные объёмы информации, записываемой на диск, обычно кратны гигабайтом, что цифры трудны для восприятия. Для вывода чисел в удобных для восприятия единицах используйте опцию -h:
Опция -h является эквивалентом указания сразу двух опций —human и —pretty, поэтому если вы не в полной мере довольны видом выводимого отчёта, то попробуйте использовать эти опции по отдельности.
Для вывода максимальной полной информации, укажите опцию -x:
Если вам нужна информация только об устройствах, то используйте опцию -d:
Вы можете запустить команду указав время интервала (в секундах) и счётчик (количество отчётов) — в этом случае программа будет выводить информацию через заданный интервал:
iostat ИНТЕРВАЛ iostat ИНТЕРВАЛ СЧЁТЧИК
Первый отчёт будет содержать информацию с момента загрузки системы, а последующие отчёты будут содержать информацию за период, прошедший с предыдущего отчёта.
Для поиска проблем, вы можете использовать следующую команду, которая непрерывно будет выводить информацию:
С помощью iostat вы можете следить за скоростью чтения и записи на всё устройство, а также выявлять отброшенные блоки.
Связанные статьи:
Как просмотреть нагрузку на диск в Linux
Статистику по операциям ввода-вывода для дисков можно посмотреть при помощи команд iostat и pidstat. Это поможет понять какие процессы создают набольшую нагрузку на дисковую подсистему.
Для работы с этими утилитами придется установить дополнительные пакеты. Инструкция по установка:
1) Debian\Ubuntu:
Команда iostat
Просмотр общей статистики ввода-вывода по дискам можно осуществить командой:
$ iostat -xtc Linux 4.4.0-36-generic (ubuntu) 11/01/17 _x86_64_ (1 CPU) 11/01/17 17:12:42 avg-cpu: %user %nice %system %iowait %steal %idle 0.75 0.09 3.40 1.83 0.00 93.93 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util fd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 60.00 60.00 0.00 60.00 0.00 sda 0.04 1.78 5.37 1.16 163.85 369.65 163.56 0.17 25.35 8.31 104.33 4.26 2.78 dm-0 0.00 0.00 5.02 2.91 156.09 369.65 132.48 0.20 25.26 8.56 54.04 3.39 2.69 dm-1 0.00 0.00 0.10 0.00 2.32 0.00 47.65 0.00 4.96 4.96 0.00 3.68 0.04
Важными столбцами являются:
- r/s Число операций чтения с диска в секунду
- w/s Число операций записи на диск в секунду
- rkB/s Число прочитанных килобайт за секунду
- wkB/s Число записанных килобайт за секунду
Команда pidstat
Просмотр статистики в разрезе процессов можно посмотреть в интерактивном режиме при помощи команды:
$ pidstat -dl 5 Linux 4.10.0-38-generic (mad) 01.11.2017 _x86_64_ (3 CPU) 17:28:03 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 17:28:08 1000 1248 0,00 0,80 0,00 0 /usr/bin/plasmashell —shut-up 17:28:08 1000 1336 0,00 0,80 0,00 0 /usr/lib/chromium-browser/chromium-browser —ppapi-flash-path=/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so —ppapi-f 17:28:08 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 17:28:13 1000 1283 0,00 0,80 0,00 0 /usr/bin/yakuake 17:28:13 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 17:28:18 1000 1283 0,00 0,80 0,00 0 /usr/bin/yakuake 17:28:18 1000 1336 0,00 19,20 0,00 0 /usr/lib/chromium-browser/chromium-browser —ppapi-flash-path=/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so —ppapi-f 17:28:18 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 17:28:23 1000 1283 0,00 3,20 0,00 0 /usr/bin/yakuake 17:28:23 1000 1336 0,00 13,60 0,00 0 /usr/lib/chromium-browser/chromium-browser —ppapi-flash-path=/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so —ppapi-f 17:28:23 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 17:28:28 1000 1336 0,00 17,60 0,00 0 /usr/lib/chromium-browser/chromium-browser —ppapi-flash-path=/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so —ppapi-f 17:28:28 1000 3353 0,00 22,40 0,00 0 /usr/lib/thunderbird/thunderbird
Важными столбцами являются:
- UID Идентификатор пользователя, от имени которого работает процесс
- PID Идентификатор процесса
- kB_rd/s Скорость в килобайтах в секунду, с которой процесс читает с диска
- kB_wr/s Скорость в килобайтах в секунду, с которой процесс записывает на диск