Определить, какой процесс вызывает тяжелый дисковый ввод-вывод?

19

Я видел этот вопрос: как определить тяжелую запись на диск?

И раньше я использовал dstat и atop ... но, похоже, они не могут точно определить, какой процесс вызывает дисковый ввод-вывод. Например, из dstat:

dstat -ta --top-bio
----system---- ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- ----most-expensive----
     time     |usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw |  block i/o process
14-12 16:16:25| 22   3  49  26   0   0|2324k    0 |  17k 6144B|   0     0 |1324     0 |
14-12 16:16:26| 24   3  30  43   0   0|4960k 8192B|1498B 4322B|   0     0 |1494     0 |wget          0  4096B
14-12 16:16:27| 25   4  38  33   0   0|4612k  548k|5011B   27k|   0     0 |1582     0 |kjournald     0    24k
14-12 16:16:28| 23   3  42  32   0   0|5072k    0 |  24k 4368B|   0     0 |1495     0 |

Обратите внимание, насколько высока dsk / total - от 2 до 5 МБ / с. Но затем посмотрите на «самый дорогой» столбец - здесь всего пара байт, пара КБ, а иногда и ничего. Это то же самое, что и «поверх». Показывает высокое общее использование диска, но низкое использование отдельными процессами. Я использую CentOS 5, ядро ​​2.6.18-53.

Нужна ли мне более новая версия ядра? Может быть, какая-то настройка системы где-то? Домашняя страница «поверх» рекомендует установить некоторые исправления ядра, но я бы не стал проходить через настройку и компиляцию собственного ядра.

Davr
источник

Ответы:

26

iotop ( ссылка ) для начинающих;) Я не видел, чтобы вы публиковали его результаты.

1: я испытал почти ту же самую ситуацию с файловой системой регистрации и atime - однако с большим количеством записей.

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

2: я полагаю, этот раздел не является частью просто перестраиваемого массива raid, не так ли?

3: Если у вас много очень маленьких файлов (намного меньше, чем фактический размер блочного устройства и / или размер файловой системы), и вы читаете эти небольшие файлы, вы в конечном итоге читаете целые блоки из системы, и большинство из этих блоков будут прочитаны даром.

4: Если ничего не помогло выше, вы всегда можете получить список файлов, к которым можно получить доступ, выполнив

echo 1 > /proc/sys/vm/block_dump

обратите внимание, что это сильно снижает производительность системы. Инструкции доступны в моем предыдущем посте здесь

asdmin
источник
1
Ударь меня примерно за 5 секунд;) +1
pehrs
Мне просто повезло, но почти сразу же расширили ответ, так как это был не совсем ответ на вопрос;)
asdmin