Знайте, какой процесс выполняет I / O без iotop

В Linux я хочу знать, какой процесс использует мой дисковый ввод-вывод.

Я знаю, что могу использовать iotop но у меня есть машина, где по разным причинам iotop нельзя установить.

Как я могу вручную получить эту информацию? (Как происходит сам iotop ?)

One Solution collect form web for “Знайте, какой процесс выполняет I / O без iotop”

Файл в /proc/<pid>/io представляет то, что вам нужно. Это небольшая работа по созданию сценариев, чтобы получить выход, похожий на iotop . См. Документацию ядра Linux в значениях /proc/<pid>/io :

rchar

Счетчик ввода / вывода: чтение chars Количество байтов, которые эта задача вызвала для чтения из хранилища. Это просто сумма байтов, которые этот процесс передал read () и pread (). Он включает в себя такие вещи, как tty IO, и на него не влияет то, требуется ли фактический физический диск IO (чтение могло быть выполнено из pagecache)

WCHAR

Счетчик ввода-вывода: записанные символы Количество байтов, вызванных этой задачей, или должно быть записано на диск. Подобные оговорки применяются здесь, как и для rchar.

[…]

read_bytes

Счетчик ввода-вывода: чтение байтов. Попытка подсчитать количество байтов, которое этот процесс действительно вызывал, чтобы извлечь из уровня хранения. Выполнено на уровне submit_bio (), поэтому оно является точным для файловых систем с резервным копированием.

write_bytes

Счетчик ввода-вывода: записанные байты. Попытка подсчитать количество байтов, которые этот процесс вызвал для отправки на уровень хранения. Это делается во время грязной страницы.

Теперь вы можете использовать этот небольшой скрипт bash :

 #!/bin/bash if [ "$(id -u)" -ne 0 ] ; then echo "Must be root" 2>&1 exit 1 fi delay=2 lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done) while :; do echo "-----" listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done) echo "$lista" | while read -r pida xa bytesa; do [ -e "/proc/$pida" ] || continue echo -en "$pida:\t" bytesb=$(echo "$listb" | awk -v pid=$pida '$1==pid{print $3}') echo "$((($bytesb - $bytesa) / $delay)) b/s" done | sort -nk2 | tail sleep $delay listb=$lista done 

Он создает два списка с задержкой в ​​2 секунды ( $delay : может быть уменьшена или уменьшена) между ними, а затем сравнивает списки и вычисляет различия. Процесс 10 с наибольшим объемом ввода-вывода печатается с диапазоном ввода-вывода за последние 2 секунды. Если вы хотите писать ввод-вывод вместо чтения ввода-вывода, просто отредактируйте команду grep в списках для wchar вместо rchar :

 lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done) listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done) 
  • Получить количество пробелов в строке?
  • Как обновить i3 блоки при переключении макетов?
  • awk проверить и распечатать, когда это правда
  • Сценарий для получения данных из файла csv и выполнения связанных операций в базе данных
  • Суммируйте определенные поля данных файла журнала Apache CLF
  • В сценарии проверьте, не поступает ли стандартный ввод из файла или канала
  • Создание каталогов в цикле и перемещение файлов в эти каталоги
  • Как использовать inotifywait для просмотра каталога для создания файлов определенного расширения
  • Составить строку IP-адресов с помощью командной строки bash
  • Лучший и короткий способ запуска программы, если другой не установлен
  • Функция Scripting SSH, получившая ошибку «Ошибка соединения»
  • Interesting Posts

    Отправка сигнала SIGINT для обработки при выполнении системного вызова или скрипта killall -SIGINT

    патчи ядра – зная, когда их делать

    корневая файловая система на устройстве nvme

    Почему Boinc Manager ведет себя иначе, чем все другие окна?

    Можем ли мы поменять местами одну установку Linux на другую?

    Добавление строки в файл через цепочку ssh

    Изменение экрана монитора по умолчанию в GRUB 2

    Kworker на 100% – я думаю, что все пробовал!

    / etc / motd не отображается при именованном канале?

    Параллельные процессы: добавление выходных данных в массив в скрипте bash

    Почему может быть создана программная ссылка на каталог с или без косой черты?

    Команда `size` от Linux дает разные результаты от` ls`

    рекурсивно удалять все файлы, пустые каталоги и каталоги с файлами из нескольких имен в текущем каталоге, включая текущий каталог

    Сроки подачи ps на grep

    rsync: Почему -archive не подразумевает –рекурсивный, когда используется -files-from = FILE?

    Linux и Unix - лучшая ОС в мире.