Как я могу записать, какой процесс или активность ядра использует диск в GNU / Linux? - PullRequest
14 голосов
/ 30 октября 2008

На конкретном сервере Debian iostat (и аналогичные) сообщают о неожиданно большом объеме (в байтах) продолжающейся записи на диск. У меня проблемы с определением, какой процесс выполняет эти записи.

Два интересных момента:

  1. Пробовал отключать системные службы по одному, но безрезультатно. Дисковая активность остается довольно постоянной и неожиданно высокой.

  2. Несмотря на запись, похоже, не занимает больше места на диске.

И то, и другое заставляет меня думать, что запись может быть чем-то, что делает ядро, но я не обмениваюсь, поэтому мне не ясно, что Linux может попытаться написать.

Можно попробовать на вершине:

http://www.atcomputing.nl/Tools/atop/

но я бы хотел избежать исправления моего ядра.

Есть идеи, как это отследить?

Ответы [ 8 ]

16 голосов
/ 08 января 2009

iotop это хорошо (на самом деле здорово).

Если у вас ядро ​​версии 2.6.20, вы не можете использовать большинство этих инструментов.

Вместо этого вы можете попробовать следующее (что должно работать почти для любого ядра 2.6RC IIRC):

    
sudo -s
dmesg -c
/etc/init.d/klogd stop
echo 1 > /proc/sys/vm/block_dump
rm /tmp/disklog
watch "dmesg -c >> /tmp/disklog"
   CTRL-C when you're done collecting data
echo 0 > /proc/sys/vm/block_dump
/etc/init.d/klogd start
exit (quit root shell)

cat /tmp/disklog | awk -F"[() \t]" '/(READ|WRITE|dirtied)/ {activity[$1]++} END {for (x in activity) print x, activity[x]}'| sort -nr -k2

Строки dmesg -c очищают ваш журнал ядра. Затем регистратор отключается, вручную (с помощью наблюдения) записывается на диск (буфер памяти мал, поэтому мы должны это сделать). Пусть он будет работать в течение пяти минут или около того, а затем CTRL-C процесс наблюдения. После отключения регистрации и перезапуска klogd проанализируйте результаты, используя в конце немного awk.

3 голосов
/ 27 декабря 2008

Если вы используете ядро ​​новее, чем 2.6.20, это очень просто, так как это первая версия ядра Linux, которая включает учет ввода / вывода. Если вы собираете свое собственное ядро, обязательно укажите:

CONFIG_TASKSTATS=y
CONFIG_TASK_IO_ACCOUNTING=y

Ядра из пакетов Debian уже включают эти флаги, поэтому нет необходимости перекомпилировать ваше ядро. Стандартной утилитой для доступа к данным учета ввода / вывода в реальном времени является iotop (1). Он предоставляет вам полный список процессов, управляемых планировщиком ввода-вывода, и отображает статистику по каждому процессу для чтения, записи и общей используемой пропускной способности ввода-вывода.

2 голосов
/ 30 октября 2008

Возможно, вы захотите изучить iotop для Linux . Есть несколько версий Solaris, но есть пакет Debian, например.

1 голос
/ 03 августа 2014

Сценарий Брендана Грегга iosnoop может (эвристически) рассказать вам о том, как в данный момент используется диск на последних ядрах ( пример вывода iosnoop ).

1 голос
/ 21 июня 2009

Вы также можете использовать htop , включив столбец IO_RATR. Htop - отличная замена топу.

1 голос
/ 30 октября 2008

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

0 голосов
/ 17 февраля 2010

Я недавно слышал о Мортадело, клоне Filemon, но сам еще не проверял:

http://gitorious.org/mortadelo

0 голосов
/ 30 октября 2008

Вы можете попробовать использовать SystemTap , в нем много примеров, и, если я не ошибаюсь, он показывает, как это делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...