Каким процессом занят диск linux

Как отследить, какой процесс создаёт нагрузку на диск

Чрезмерная нагрузка на диск может быть вызвана такой причиной как заражение вирусом либо неправильная настройка программ. В любом случае, необходимо начать с идентификации процесса (программы), которая больше всего делает операций чтения и записи на диск.

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 и их производные выполните команду:

Читайте также:  Linux для rdp терминала

Следующая команда будет выводить накопленную статистику за каждые 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 ИНТЕРВАЛ СЧЁТЧИК

Первый отчёт будет содержать информацию с момента загрузки системы, а последующие отчёты будут содержать информацию за период, прошедший с предыдущего отчёта.

Читайте также:  Как открыть образ linux

Для поиска проблем, вы можете использовать следующую команду, которая непрерывно будет выводить информацию:

С помощью iostat вы можете следить за скоростью чтения и записи на всё устройство, а также выявлять отброшенные блоки.

Связанные статьи:

Источник

What Process is using all of my disk IO [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.

If I use «top» I can see what CPU is busy and what process is using all of my CPU. If I use «iostat -x» I can see what drive is busy. But how do I see what process is using all of the drive’s throughput?

Well, technically that is true for Linux too, since user processes only modify pages in the page cache. 😉

Just the question I had and the answer I was looking for but doesn’t this kind of question fit better at SuperUser?

And this is why Linux is inferior to Solaris and MacOS because they have dtrace built in that makes this trivially simple to find out :-/

7 Answers 7

You’re looking for iotop (assuming you’ve got kernel >2.6.20 and Python 2.5). Failing that, you’re looking into hooking into the filesystem. I recommend the former.

iotop seems to be showing I/O bandwidth rather than the number of IOPS consumed by processes. This is not super relevant. A process doing lots of small writes+sync is going to consume more of the disk’s IO capacity than a process writing a large contiguous batch of data at high speed.

For small writes all I saw was [jdb2/nvme0n1p1] in iotop, but I got lucky with enabling /proc/sys/vm/block_dump and comparing the output to a healthy/stable system lxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/… It helped find a docker container that was continuously spawning kubectl requests, exhausting an EBS volume’s burst credits with entries in /home/spinnaker/.kube/cache/discovery/. /serverresources.json . Once you narrow things down to a user/process name something like iotop -atku systemd-network | grep kubectl may also help

To find out which processes in state ‘D’ (waiting for disk response) are currently running:

while true; do date; ps aux | awk »; sleep 1; done

Wed Aug 29 13:00:46 CLT 2012 root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:47 CLT 2012 Wed Aug 29 13:00:48 CLT 2012 Wed Aug 29 13:00:49 CLT 2012 Wed Aug 29 13:00:50 CLT 2012 root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:51 CLT 2012 Wed Aug 29 13:00:52 CLT 2012 Wed Aug 29 13:00:53 CLT 2012 Wed Aug 29 13:00:55 CLT 2012 Wed Aug 29 13:00:56 CLT 2012 root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:57 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:58 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:59 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:01:00 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:01:01 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:01:02 CLT 2012 Wed Aug 29 13:01:03 CLT 2012 root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] 

As you can see from the result, the jdb2/dm-0-8 (ext4 journal process), and kdmflush are constantly block your Linux.

Читайте также:  Диск windows файловая система linux

For more details this URL could be helpful: Linux Wait-IO Problem

Being AWK pedantic, I’d rather like awk ‘$8==»D»‘; . AWK statements are condition < action >. No need for if if test is put outside of actions, in condition part. And print $0 is implicit if no other action is specified.

atop also works well and installs easily even on older CentOS 5.x systems which can’t run iotop. Hit d to show disk details, ? for help.

ATOP - mybox 2014/09/08 15:26:00 ------ 10s elapsed PRC | sys 0.33s | user 1.08s | | #proc 161 | #zombie 0 | clones 31 | | #exit 16 | CPU | sys 4% | user 11% | irq 0% | idle 306% | wait 79% | | steal 1% | guest 0% | cpu | sys 2% | user 8% | irq 0% | idle 11% | cpu000 w 78% | | steal 0% | guest 0% | cpu | sys 1% | user 1% | irq 0% | idle 98% | cpu001 w 0% | | steal 0% | guest 0% | cpu | sys 1% | user 1% | irq 0% | idle 99% | cpu003 w 0% | | steal 0% | guest 0% | cpu | sys 0% | user 1% | irq 0% | idle 99% | cpu002 w 0% | | steal 0% | guest 0% | CPL | avg1 2.09 | avg5 2.09 | avg15 2.09 | | csw 54184 | intr 33581 | | numcpu 4 | MEM | tot 8.0G | free 81.9M | cache 2.9G | dirty 0.8M | buff 174.7M | slab 305.0M | | | SWP | tot 2.0G | free 2.0G | | | | | vmcom 8.4G | vmlim 6.0G | LVM | Group00-root | busy 85% | read 0 | write 30658 | KiB/w 4 | MBr/s 0.00 | MBw/s 11.98 | avio 0.28 ms | DSK | xvdb | busy 85% | read 0 | write 23706 | KiB/w 5 | MBr/s 0.00 | MBw/s 11.97 | avio 0.36 ms | NET | transport | tcpi 2705 | tcpo 2008 | udpi 36 | udpo 43 | tcpao 14 | tcppo 45 | tcprs 1 | NET | network | ipi 2788 | ipo 2072 | ipfrw 0 | deliv 2768 | | icmpi 7 | icmpo 20 | NET | eth0 ---- | pcki 2344 | pcko 1623 | si 1455 Kbps | so 781 Kbps | erri 0 | erro 0 | drpo 0 | NET | lo ---- | pcki 423 | pcko 423 | si 88 Kbps | so 88 Kbps | erri 0 | erro 0 | drpo 0 | NET | eth1 ---- | pcki 22 | pcko 26 | si 3 Kbps | so 5 Kbps | erri 0 | erro 0 | drpo 0 | PID RDDSK WRDSK WCANCL DSK CMD 1/1 9862 0K 53124K 0K 98% java 358 0K 636K 0K 1% jbd2/dm-0-8 13893 0K 192K 72K 0% java 1699 0K 60K 0K 0% syslogd 4668 0K 24K 0K 0% zabbix_agentd 

This clearly shows java pid 9862 is the culprit.

Источник

Оцените статью
Adblock
detector