Как отследить, какой процесс создаёт нагрузку на диск
Чрезмерная нагрузка на диск может быть вызвана такой причиной как заражение вирусом либо неправильная настройка программ. В любом случае, необходимо начать с идентификации процесса (программы), которая больше всего делает операций чтения и записи на диск.
iotop — аналог top для отслеживания нагрузки на диск в реальном времени
Программа top позволяет увидеть, какие процессы потребляют больше всего процессорного времени и оперативной памяти, но ничего не говорит об использовании процессами диска, об операциях чтения и записи на диск.
Программа iotop показывает скорость чтения и записи на диск, также процент использования файла подкачки каждым процессом.
Для установки iotop в Debian, Linux Mint, Kali Linux, Ubuntu и их производные выполните команду:
sudo apt install iotop
Для установки iotop в Arch Linux, BlackArch, Manjaro и их производные выполните команду:
sudo pacman -S iotop
Программа требует повышенных привилегий для запуска:
sudo iotop
В выводе программы присутствуют следующие столбцы:
- TID — идентификатор процесс
- PRIO — приоритет процесса
- USER — пользователь, который является владельцем процесса
- DISK READ — скорость чтения диска
- DISK WRITE — скорость записи на диск
- SWAPIN — процент использования файла подкачки
- IO> — процент от всех операций ввода-вывода
- COMMAND — запустившая процесс команда
С помощью курсорных клавиш вправо (→) и влево (←) вы можете переключаться между столбцами, одновременно выбирая, по какому из них будет выполнятся сортировка.
С помощью кнопок «Home» и «End» вы можете переключаться между крайними столбцами.
Нажатие любой клавиши обновит окно.
Для выхода нажмите «q».
Нажав клавишу «o» вы переключитесь на показ только активных процессов, то есть только процессов, которые записывают и считывают данные с постоянного хранилища. Такой же результат вы можете получить запустив программу с опцией -o:
sudo iotop -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 и их производные выполните команду:
sudo apt install sysstat
Для установки pidstat в Arch Linux, BlackArch, Manjaro и их производные выполните команду:
sudo pacman -S sysstat
Следующая команда будет выводить накопленную статистику за каждые 20 секунд, будут показаны только активные процессы (сделавшие операции чтения и записи на диск за указанный интервал), также будет показана полная команда, запустившая процесс. Для более полной статистики запустите программу с повышенными привилегиями:
sudo pidstat -dl 20
Каждая строка будет иметь следующие столбцы:
- Метка времени
- UID — числовой идентификатор пользователя
- PID — идентификатор процесса
- kB_rd/s — количество килобайт в секунду которые были прочитаны по инициативе указанной задачи
- kB_wr/s — количество килобайт в секунду которые были (или должны были быть) записаны по инициативе указанной задачи
- kB_ccwr/s — количество килобайт, запись которых на диск была отменена задачей. Это может произойти, когда задача усекает грязный кэш страниц. В этом случае некоторые операции ввода-вывода, для которых была учтена другая задача, не будут выполняться
- iodelay — задержка ввода-вывода
- Command — команда, запустившая задачу
iostat — статистика использования устройств и разделов дисков
Утилита iostat также включена в пакет sysstat. Как можно догадаться из названия программы, она создаёт отчёты по статистике ввода/вывода для устройств и разделов. Её особенностью является то, что она показывает обобщённую статистику для всей системы, а также для отдельных носителей, не разбивая её на процессы. Программа iostat может пригодиться когда необходимо ответить на вопрос: «какой из постоянных носителей подвергается наибольшей нагрузке?».
Запуск программы без опций
iostat
выведет два блока информации:
- отчёт по использованию ЦПУ
- отчёт по использованию устройств
Раздел со статистикой использований устройств содержит следующие разделы:
- Device — имя устройства или раздела, как оно указано в /dev
- tps — указывает количество передач в секунду, отправленных на устройство. Передача — это запрос ввода-вывода к устройству. Несколько логических запросов можно объединить в один запрос ввода-вывода к устройству. Размер перевода является неопределённой величиной
- kB_read/s — указывает объём данных, считанных с устройства, выраженный в количестве блоков (килобайт, мегабайт) в секунду. Блоки эквивалентны секторам и поэтому имеют размер 512 байт
- kB_wrtn/s — указывает объём данных, записываемых на устройство, выраженный в количестве блоков (килобайт, мегабайт) в секунду
- kB_dscd/s — указывает количество данных, отбрасываемых устройством, выраженное в количестве блоков (килобайт, мегабайт) в секунду
- kB_read — общее количество прочитанных блоков (килобайт, мегабайт)
- kB_wrtn — общее количество записанных блоков (килобайт, мегабайт)
- kB_dscd — общее количество отброшенных блоков (килобайт, мегабайт)
Отчёт выводит для всей системы с момента её загрузки.
Поскольку по умолчанию данные выводятся в килобайтах, а современные объёмы информации, записываемой на диск, обычно кратны гигабайтом, что цифры трудны для восприятия. Для вывода чисел в удобных для восприятия единицах используйте опцию -h:
iostat -h
Опция -h является эквивалентом указания сразу двух опций —human и —pretty, поэтому если вы не в полной мере довольны видом выводимого отчёта, то попробуйте использовать эти опции по отдельности.
Для вывода максимальной полной информации, укажите опцию -x:
iostat -x
Если вам нужна информация только об устройствах, то используйте опцию -d:
iostat -d
Вы можете запустить команду указав время интервала (в секундах) и счётчик (количество отчётов) — в этом случае программа будет выводить информацию через заданный интервал:
iostat ИНТЕРВАЛ iostat ИНТЕРВАЛ СЧЁТЧИК
Первый отчёт будет содержать информацию с момента загрузки системы, а последующие отчёты будут содержать информацию за период, прошедший с предыдущего отчёта.
Для поиска проблем, вы можете использовать следующую команду, которая непрерывно будет выводить информацию:
iostat -d 1 iostat -dx 1
С помощью iostat вы можете следить за скоростью чтения и записи на всё устройство, а также выявлять отброшенные блоки.
Связанные статьи:
- Как проверить дисковое пространство на Linux с командой df (73.8%)
- Как исправить ошибку ‘No Space Left on Device’ (на устройстве не осталось места) на Linux, когда свободное место на самом деле есть (73.8%)
- ncdu: графический интерфейс du чтобы быстро узнать, какие файлы и папки израсходовали место на диске (73.8%)
- Как найти файлы и папки занимающие больше всего места в Linux (73.8%)
- Какие файлы можно удалить при нехватке места на диске Linux (73.8%)
- Как изменить количество действий «Отмена» в LibreOffice (RANDOM — 9.8%)
Нагрузка на диски в Linux

Для измерения текущей нагрузки на диски (что происходит, кто куда копирует и прочее) в Linux можно использовать iotop (и здесь же lsof) и iostat. А для тестирования возможностей дисковой системы fio. Несмотря на то, что первое, о чем можно подумать в плане попугаев — это IOPS или же Мб/сек за чтение или запись, обратите внимание на время ожидания. Примерно как если бы вы стояли в очереди в кассу: вас обслужили бы за 2 минуты, но очередь может быть минут на 30. И со стороны наблюдателя ваш процесс обслуживания будет «висеть». Именно так могут ощущать себя клиенты сервера, если время ожидания будет намного превышать время выполнения конкретной задачи. Поэтому определение длинной очереди и задержек часто бывает более важным, чем знать, что ваш диск «вау, может писать 400 Мбит/с». Нагрузка на диск может оказаться в 4000 Мбит/с в течение длительных периодов времени и все это время клиенты сервера будут недовольны.
Я здесь пишу свой опыт, со своим видением и трактовкой. Пожалуйста, учитывайте это.
IOTOP
Посмотреть, какие процессы в настоящее время создают нагрузку на диск удобно смотреть командой iotop:
# iotop Total DISK READ: 38.27 M/s | Total DISK WRITE: 36.91 M/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 28096 be/4 root 0.00 B/s 15.75 K/s 0.00 % 99.99 % [flush-8:64] 28044 be/3 root 0.00 B/s 0.00 B/s 0.00 % 99.99 % [jbd2/sde1-8] 28074 be/4 root 38.14 M/s 38.12 M/s 0.00 % 94.27 % mc -P /tmp/mc-root/mc.pwd.27971 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [stopper/0] 6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] 7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1] .
Здесь видно, что в данный момент mc что-то пишет (а в это время в другом окне я в самом деле копировал кучу файлов на usb-диск в Midnight Commander (он же mc).
Понять, что коипрует mc в данный момент можно узнать командой:
IOSTAT
Пример вывода iostat на незагруженной в данный момент старенькой системе из двух SATA HDD в soft raid 1 (зеркало) mdadm:
10/02/2015 12:30:58 PM avg-cpu: %user %nice %system %iowait %steal %idle 5.22 0.00 1.91 8.23 0.00 84.64 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 40.20 1.80 0.39 0.00 19.24 0.21 4.90 4.51 18.94 sdb 0.00 0.00 0.00 1.80 0.00 0.00 3.67 0.01 7.22 7.11 1.28 md1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 md2 0.00 0.00 40.20 0.40 0.39 0.00 19.82 0.00 0.00 0.00 0.00 md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Команда выглядела так:
-x — расширенная статистика
-t — выводить время для каждой порции замеров
-m — результаты в Мбайт
5 — интервал замеров 5 секунд.
Если нужны не история, а динамика процесса, попробуйте так:
watch iostat -x -t -m 1 2
В этом выводе r/s и w/s это отправленные к устройству запросы на выполнение (IOPS, которые хотелось бы, чтобы устройство выполнило).
await — время, включающее ожидание выполнения запроса (как если бы вы встали в очередь в кассу и ждали бы, пока вас обслужат).
svctm — время, реально затраченное на выполнение запроса (время «на самой кассе»).
Для обычных SATA дисков нагрузка IOPS где-то до 100-130 вполне выполнимая. В момент проведения замеров запрошенная нагрузка была 40 IOPS, поэтому запрос практически в очереди и не стоял, его обслужили почти сразу (на «кассе» никого не было). Поэтому await практически равен svctm.
Другое дело, когда нагрузка на диск вырастает:
10/02/2015 12:33:21 PM avg-cpu: %user %nice %system %iowait %steal %idle 10.36 0.00 10.26 52.41 0.00 26.97 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sda 2.80 3800.40 65.20 327.80 5.97 16.12 115.07 45.79 116.45 2.38 93.38 sdb 0.20 3799.00 18.80 329.00 2.41 16.12 109.09 35.00 100.60 2.08 72.28 md1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 md2 0.00 0.00 87.00 4124.80 8.38 16.11 11.91 0.00 0.00 0.00 0.00 md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
%iowait — простой процессора (время в процентах) от или процессоров, в то время пока обрабатывались запросы. Т.е. в среднем процессор отдыхал почти 50% времени.
%user — загруженность процессора пользовательскими приложениями. По этому параметру видно, например, что в данный период процессор был почти не занят. Это важно, т.к. может помочь отсечь подозрения в тормозах из-за процессора.
Замер сделан во время переноса большого количества писем из одной папки IMAP в другую. Особо обратите внимание на await и svctm. Налицо длинная очередь (отношение await к svctm). Дисковая система (или чипсет, или медленный контроллер SATA, или. ) не справляется с запрошенной нагрузкой (w/s).. Для пользователей в этот момент все выглядело просто — сервер тупит или даже завис.
FIO
Заранее проверить производительность дисков можно с помощью fio. Также можно примерно оценить на одной машине производительность дисков и понимать, какой уровень «в среднем по больнице» вы можете ожидать. Это, конечно же, не правильно, но оценить все же поможет. Глубже анализировать результаты, а, главное, методики тестов мне пока трудно.
# yum install fio
# apt-get install fio
В общем виде запуск выглядит так:
Файл your.cfg (название произвольное) может быть примерно таким (пример рабочего конфига для теста на чтение):
[readtest] blocksize=4k filename=/dev/sda rw=randread direct=1 buffered=0 ioengine=libaio iodepth=32
Буферизацию не используем (buffered=0), чтение не последовательное (rw=randread).
Во время выполнения этого теста (а выполняться тест может доооолго, надоест — Ctrl+C, результаты все равно будут) можно запустить iostat и посмотреть, что происходит:
10/02/2015 04:17:37 PM avg-cpu: %user %nice %system %iowait %steal %idle 0.60 0.00 1.70 4.01 0.00 93.69 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 2.80 110.20 1.00 0.43 0.01 8.19 32.23 289.11 289.45 251.20 8.99 100.00 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Обратите внимание на отношение await к svctm: await/svctm = 32,11..11, т.е. можно считать 32. Это и есть iodepth из конфига your.cfg. Теперь проще понять смысл iodepth — мы указываем, насколько хотим в тесте имитировать длинную очередь заданий.
Я не стал ждать два дня, Ctrl+C и вот результат:
readtest: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=32 fio-2.1.3 Starting 1 process ^Cbs: 1 (f=1): [r] [2.5% done] [439KB/0KB/0KB /s] [109/0/0 iops] [eta 02d:00h:19m:31s] fio: terminating on signal 2 readtest: (groupid=0, jobs=1): err= 0: pid=4307: Fri Oct 2 17:15:17 2015 read : io=1920.9MB, bw=448449B/s, iops=109, runt=4491370msec slat (usec): min=5, max=599, avg=49.93, stdev= 8.69 clat (msec): min=10, max=1445, avg=292.21, stdev=208.52 lat (msec): min=10, max=1445, avg=292.26, stdev=208.52 clat percentiles (msec): | 1.00th=[ 34], 5.00th=[ 49], 10.00th=[ 67], 20.00th=[ 102], | 30.00th=[ 141], 40.00th=[ 186], 50.00th=[ 241], 60.00th=[ 306], | 70.00th=[ 383], 80.00th=[ 478], 90.00th=[ 603], 95.00th=[ 693], | 99.00th=[ 865], 99.50th=[ 930], 99.90th=[ 1057], 99.95th=[ 1106], | 99.99th=[ 1221] bw (KB /s): min= 242, max= 527, per=100.00%, avg=438.05, stdev=25.81 lat (msec) : 20=0.01%, 50=5.48%, 100=14.13%, 250=32.05%, 500=30.56% lat (msec) : 750=14.65%, 1000=2.93%, 2000=0.21% cpu : usr=0.54%, sys=1.14%, ctx=501271, majf=0, minf=59 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0% issued : total=r=491736/w=0/d=0, short=r=0/w=0/d=0 Run status group 0 (all jobs): READ: io=1920.9MB, aggrb=437KB/s, minb=437KB/s, maxb=437KB/s, mint=4491370msec, maxt=4491370msec Disk stats (read/write): sda: ios=491810/3605, merge=257/4862, ticks=143668620/1157164, in_queue=144830660, util=100.00%
Получили 109 iops, что в принципе нормально, диск обычный, SATA.
11.02.2017 10:26 4mg
Спасибо. Кратко и понятно. Только пожалуйста, сделайте авторизацию удобнее — кучу шагов надо сделать, чтобы оставить комментарий.
Авторизуйтесь для добавления комментариев!
Как посмотреть нагрузку на диск linux
Для проверки нагрузки на диск в Linux можно пользоваться двумя утилитами: iotop и iostat .
Утилита iotop показывает создаваемую нагрузку по процессам, показывает «мгновенный» ввод-вывод всех процессов по отдельности и всей дисковой подсистемы (сверху).
Утилита iostat показывает обращения к диску, ее можно использовать, например, так:
- Синтаксис команды find
- Поиск файла по содержимому в Linux
- Как заменить часть текста во всех нужных файлах
- Синтаксис команды grep
- Как узнать, какой процесс держит файл при невозможности отмонтирования
- Как смонтировать *.nrg образ CD-диска
- Программа comm — удаление одинаковых строк в двух файлах
- Как узнать размер директорий в Линукс
- Как узнать тип процессора
- Как узнать информацию о материнской плате
- Как высчитать UUID для жесткого диска
- Запись на NTFS-раздел
- Как отформатировать текст по ширине
- Чем можно пропарсить XML и убрать все пробелы и табуляции между тегами
- Как запустить программу в виде демона
- Как сконструировать нужную команду из переданных аргументов с помощью awk
- Как сконструировать нужную команду с помощью xargs. Понимание xargs.
- Как создать ZIP-архив и разбить его на куски нужных размеров
- Создание ссылки на файл
- Монтирование флешки или переносного винчестера
- Как сделать копию MBR
- Как получить часть файла, пропустив строки в начале и в конце
- Работа со строками в bash
- Как выделить столбец (поле) в строке
- Поставь все на конвейер
- Тонкая настройка производительности файловой системы
- Как запустить программу с определенной периодичностью через watch
- Как в Linux записать на DVD файл больше 4Gb
- Что сделать, если при запуске CBuilderX появляется ошибка «No protocol specified»
- Как установить права на директории и поддиректории, не затрагивая прав файлов и наоборот
- Как получить список только файлов в каталоге или только директорий в каталоге
- Различия экранирования символов в командной строке и в скриптах
- Как создать ISO образ CD-ROM диска с помощью программы dd
- Как создать ISO образ из директории с файлами
- Как примонтировать ISO образ в виде директории
- Как примонтировать ISO образ CD-ROM/DVD с файловой системой UDF в виде директории
- Как запустить программу на втором ядре в Linux
- Подсчет контрольной суммы MD5, SHA1, SHA256, SHA384, SHA512, CRC в Linux
- Документация по GParted
- Утилита fakeroot
- Как создать файловую систему в Linux
- Как узнать, какой процесс не дает отмонтировать устройство
- Как в Linux посмотреть данные, передающиеся на COM порт
- Программы для работы с COM-портом в Linux
- Как переконвертировать образ CD диска из img в iso формат
- Как узнать какие строки присутствуют в файле более 1 раза, и сколько раз повторяются?
- Как установить всем подкаталогам нужные права доступа
- Исключение для rm -rf *
- Как в войти в linux и восстановить пароль рута
- Как переконвентировать образ *.ngr в *.iso
- Как подсчитать количество строк в файлах (в каталогах)
- Как накладывать патчи (patch)
- Как добавить каталог для поиска библиотек
- Программа xkbevd — слежение за событиями клавиатуры
- Как посмотреть переменные окружения в Linux
- Как быстро подсчитать количество строк в программе
- Настройка приглашения оболочки Bash
- Как упаковать данные из стандартного потока в файл на лету
- Создание загрузочной флешки с помощью Grub2 с возможностью сохранять состояние системы
- Настройка Cron, формат конфигурационного файла
- Cron: где находятся его файлы конфигурации, и как его настраивать
- Как сделать WatchDog через Сron для перезапуска сервиса в случае падения
- grub — как восстанавливаться в rescue mode
- Как сравнивать бинарные файлы в Linux. Программа vbindiff
- Как сравнивать бинарные файлы в Linux. Вариант с помощью diff и cmp.
- Что делает программа fakeroot
- Как в Linux узнать температуру ядра видеокарты NVidia
- Как в Linux сделать предупреждение при повышении температуры видеокарточки
- Как быстро удалить все переносы строк в файле
- Клонирование (копирование) диска на другую машину подручными средствами
- Дефрагментация раздела с файловой системой ext4
- Резервное копирование при помощи rdiff-backup
- Unix-way напоминалка о событиях
- Способ удаления большого числа файлов через команду find
- Эффективное удаление большого количества файлов в одной директории, разные способы
- Как посмотреть количество оставшихся inod
- Как в Linux посмотреть каталог с большим количеством файлов
- Как в Linux (в Debian или Ubuntu) прописать локаль
- Bash. Как удалить строки из файла, которые встречаются в другом файле
- Как в Linux узнать информацию о swap-разделе
- Как порипать музыкальные треки с CD-Rom в Linux
- Список всех самых популярных и важных команд в Linux
- Настройка Cloudfuse — Использование OpenStack Swift
- Настройка cloudfuse, пример
- Копирование в консоли с индикатором прогресса в Linux. Использование программы pv.
- Как в Linux увидеть дерево процессов через команду ps
- Linux: Настройка жестких дисков (файловой системы) через tune2fs
- Linux: Как отключить автопроверку дисков после определенного числа монтирований
- Linux: пример запроса Да/Нет на Bash
- Запись CD-Rom в консоли с помощью команды cdrecord
- Запись CD-Rom в консоли с помощью команды wodim
- Настройка работы свопа (swap) в Linux
- Linux: Профилирование нагрузки на файловую систему с помощью iostat и gnuplot
- Перебор файлов в директории. Пример на bash
- Пример перебора файлов с именами, содержащими пробелы, на Bash
- Как найти самые большие файлы в Linux — Как узнать, что занимает больше всего места на диске
- Linux: Проверка нагрузки на диск, ввод-вывод
- Шпаргалка по Linux для системного администратора
- Как найти недавно модифицированные файлы в Linux
- Как узнать, какие файлы открывает или пытается открыть программа в Linux
- Zip: Как сохранить в архив файлы из списка
- Как в Linux упаковать dot-файлы и директории в ZIP архив
- Linux: Как запустить команду в фоне чтобы она не была остановлена (заморожена)
- Как вывести список директорий с сортировкой по занимаемому размеру
- Процессы в Linux. Установка приоритетов для процессов: nice, renice
- Как в Linux найти последние добавленные (отредактированные) файлы
- Как правильно менять пользователя в Linux. Использование команды su
- Linux: Что правильно использовать: su или sudo?
- Какую информацию о времени изменения файла можно получить в Linux на файловой системе extX
- Как добавить и удалить пользователя в Linux
- Linux: Как узнать ID окна по его заголовку (имени) в среде X11
- Что обозначают права доступа для каталогов в файловой системе Linux
- Раздел SWAP — как создать, подключить, очистить и отключить файл подкачки в Linux
- Как в Bash убрать у имени файла расширение
- Как в Midnight Commander настроить открытие Word и Excel-файлов в Libre Office
- Как в Linux получить список файлов с полным путем, со всеми поддиректориями
- Как в bash вывести содержимое файла до конкретной строки?
- Как установить нужный пароль пользователю в Linux
- Как с помощью команды yes все время нажимать Enter?
- Как заменить строку «\n» на настоящий символ перевода строки?
- Создание искусственной нагрузки на диск и процессор в Linux
- Как применить chmod или chown к скрытым файлам (dot-файлам)
- Копирование файлов и каталогов в Bash командой cp — разбор неочевидных моментов
- Как через sed напечатать каждую вторую/третью/четвертую/пятую строку из файла
- Как узнать версию glibc в Linux
- Как получить информацию о системе в Linux
- Как удалить каталог и как очистить каталог в Linux?
- Как в Bash быстро поместить содержимое файла в переменную?
- Как разбить файл на несколько частей и как склеить файл из частей в Linux
- Использование команды mount в Linux. Основы монтирования.
- Опции команды mount и опции монтирования
- Более функциональные аналоги утилит top и htop в Linux
- Как превратить «книжный» текст с переносами слов в одну строку на абзац?
- Как сделать проверку, чтобы bash-скрипт выполнялся только в Bash?
Смотрим нагрузку на диски
Иногда бывают ситуации, когда в top’e вроде бы всё нормально, но сервер всё равно тормозит. Тогда нужно обратить внимание на нагрузки дисковой подсистемы. В статье мы рассмотрим варианты для Unix систем: FreBSD, OpenBSD, Linux, Solaris.
FreeBSD
Во FreeBSD есть штатная утилита gstat, при запуске которой без параметров мы увидим текущую нагрузку на диски.
#gstat dT: 1.043s w: 1.000s L(q) ops/s r/s kBps ms/r w/s kBps ms/w %busy Name 1 248 81 5154 10.0 168 11719 7.1 93.5| ad4 0 0 0 0 0.0 0 0 0.0 0.0| md0 0 0 0 0 0.0 0 0 0.0 0.0| amrd0 0 0 0 0 0.0 0 0 0.0 0.0| amrd0s1 0 0 0 0 0.0 0 0 0.0 0.0| amrd0s1a 0 0 0 0 0.0 0 0 0.0 0.0| amrd0s1b 0 0 0 0 0.0 0 0 0.0 0.0| amrd0s1d 0 0 0 0 0.0 0 0 0.0 0.0| amrd0s1e 0 0 0 0 0.0 0 0 0.0 0.0| amrd0s1f
Как видно из примера, очень большая нагрузка на диск ad4.
Так же можно смотреть и через iostat (пример из другой ОС):
#iostat -x 1 extended device statistics device r/s w/s kr/s kw/s qlen svc_t %b ada0 1.8 5.0 8.9 115.0 0 11.1 1 pass0 0.0 0.0 0.0 0.0 0 0.0 0 extended device statistics device r/s w/s kr/s kw/s qlen svc_t %b ada0 2.0 0.0 35.8 0.0 0 2.9 1 pass0 0.0 0.0 0.0 0.0 0 0.0 0
А ещё можно использовать команду systat -iostat:
/0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /10 Load Average ||| /0% /10 /20 /30 /40 /50 /60 /70 /80 /90 /100 cpu user|XXXXXX nice| system|X interrupt| idle|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /0% /10 /20 /30 /40 /50 /60 /70 /80 /90 /100 ad8 MB/sXXXXXXXX tps|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX144.17 ad10 MB/s tps|XXXXXXXXXX
А что-бы определить процесс, который нагружает диски, выполним такую команду:
#top -m io -o total
OpenBSD
Для OpenBSD есть штатная утилита iostat, которая показывает нагрузку на диски+CPU usage. При обычном запуске она показывает не больше 4 дисков, но если нужно больше, то указываем все нужные диски.
# iostat -w 1 wd0 wd1 wd2 wd3 wd4 wd5 tty wd0 wd1 wd2 wd3 wd4 wd5 cpu tin tout KB/t t/s MB/s KB/t t/s MB/s KB/t t/s MB/s KB/t t/s MB/s KB/t t/s MB/s KB/t t/s MB/s us ni sy in id 0 6 15.99 0 0.00 15.98 0 0.00 12.16 5 0.05 13.54 0 0.00 15.64 0 0.00 15.84 0 0.00 0 0 0 0 99 0 725 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0100 0 242 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0100 0 242 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0100 0 242 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0100 0 242 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0100 0 242 0.00 0 0.00 0.00 0 0.00 16.00 2 0.03 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0100
Linux
Для Linux есть аналог утилиты gstat – iostat. В Debian/Ubuntu она находится в пакете sysstat.
#iostat -p 1 Linux 2.6.26-2-686 02/02/2012 _i686_ avg-cpu: %user %nice %system %iowait %steal %idle 5.55 0.10 0.28 5.09 0.00 88.98 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 21.11 169.01 847.22 581573217 2915262040 sda1 0.00 0.00 0.00 6198 5000 sda2 21.11 169.01 847.22 581566715 2915257040 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 8.90 0.00 91.10 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 sda1 0.00 0.00 0.00 0 0 sda2 0.00 0.00 0.00 0 0
Здесь мы поставили автообновление каждую секунду. Хочу обратить внимание на то, что первые пару выводов во внимание не брать, так как в первом выводе отображается информация из кеша, а не реальные показатели. Как видим, диски здесь не нагружены
Для определения процесса, который нагружает диски, есть утилита iotop, правда её нужно ставить отдельно.
Solaris
Для solaris существует 3 метода: zpool iostat, утилита iostat, fsstat. Единственный недостаток, это то, что мы не сможем отображать статистику отдельно по каждой из zfs, а только можем отдельно по каждому диску:
# zpool iostat -vl 1 capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- rpool 3.29G 12.6G 4 23 150K 125K c4t0d0s0 3.29G 12.6G 4 23 150K 125K ---------- ----- ----- ----- ----- ----- ----- capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- rpool 3.29G 12.6G 0 0 0 0 c4t0d0s0 3.29G 12.6G 0 0 0 0 ---------- ----- ----- ----- ----- ----- -----
# iostat -Cxn 5 extended device statistics r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t5000C5003BD6AC2Fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t5000C50042E0EE17d0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t5000C50042E0F85Bd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t5000C5003BD6A46Fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t5000C5003BCBFFFBd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t5000C50042E16163d0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t600144F00200000000004EF354850001d0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t600144F0D0BEC80000004EF4BC960001d0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t600144F00200000000004EF2A7E20001d0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t600144F00200000000004EF48B630001d0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c3t0d0
Здесь как и в случае с Linux не учитываем первый вывод. Как видим, диски простаивают (значение столбца %b – busy).
Общую картину можно так же посмотреть через fsstat:
$ fsstat -i zfs 1 read read write write rddir rddir rwlock rwulock ops bytes ops bytes ops bytes ops ops 2.16G 7.97T 423M 4.20T 75.3M 9.7G 2.68G 2.68G zfs 5.35K 37.0M 1.07K 18.5M 32 4.25K 6.47K 6.47K zfs 5.50K 38.0M 1.14K 19.0M 22 2.92K 6.68K 6.68K zfs 5.39K 37.1M 1.03K 18.5M 58 7.70K 6.50K 6.50K zfs 5.38K 37.9M 1.10K 18.9M 20 2.66K 6.51K 6.51K zfs
Очень удобно просматривать информацию по конкретной zfs:
$ fsstat -i /export/home/user55 1 read read write write rddir rddir rwlock rwulock ops bytes ops bytes ops bytes ops ops 466M 922G 5.18M 1.17T 74.5M 9.01G 582M 582M /export/home/user55 70 21.0K 0 0 20 2.66K 100 100 /export/home/user55 77 23.1K 0 0 22 2.92K 110 110 /export/home/user55 119 35.8K 0 0 34 4.52K 170 170 /export/home/user55