Я видел этот вопрос: Как определить интенсивную запись на диск?
И я использовал dstat и наверху раньше ... но они, похоже, не определяют, какой процесс вызывает дисковый ввод-вывод. Например, из 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.
Нужна ли мне более новая версия ядра? Может быть, какие-то настройки конфигурации системы где-то? Домашняя страница «поверх» рекомендует установить некоторые патчи ядра, но я бы предпочел не тратить время на настройку и компиляцию собственного ядра.
iotop (ссылка на сайт) для начала;) Я не видел, чтобы вы публиковали его результаты.
1: Я испытал почти такую же ситуацию с файловой системой регистрации и atime, но с большим количеством операций записи.
Попробуйте перемонтировать с помощью noatime и отключить ведение журнала файловой системы (позже только для тестирования), чтобы увидеть, основана ли она на файловой системе и, как уже говорилось, iotop, если она основана на процессе.
2: Я полагаю, этот раздел не является частью массива рейдов, который только что перестраивает, не так ли?
3: Если у вас много очень маленьких файлов (намного меньше, чем фактический размер блока блочного устройства и / или размер блока файловой системы), и вы читаете эти маленькие файлы, вы в конечном итоге читаете целые блоки из системы, и большинство эти блоки будут прочитаны даром.
4: Если выше ничего не помогает, вы всегда можете получить список файлов, к которым осуществляется доступ, выполнив
echo 1 > /proc/sys/vm/block_dump
учтите, что это сильно снижает производительность системы. Инструкции доступны в моем предыдущий пост здесь