Меня интересует утилита или процесс для мониторинга дискового ввода-вывода по файлам в CentOS.
На Win2008 утилита resmon разрешает такой тип детализации, но ни одна из найденных мной утилит Linux не делает этого (iostat, iotop, dstat, nmon).
Мой интерес к мониторингу узких мест ввода-вывода на серверах баз данных. С MSSQL я нашел информативную диагностику, чтобы знать, какие файлы / файловые пространства наиболее сильно пострадали.
Ответы:
SystemTap , вероятно, ваш лучший вариант.
Вот как выглядит вывод из примера iotime.stp :
Недостаток (кроме кривой обучения) заключается в том, что вам нужно будет установить отладку ядра , что может быть невозможно в производственной системе. Однако вы можете прибегнуть к кросс-инструментированию, когда вы компилируете модуль в системе разработки и запускаете этот .ko в производственной системе.
Или, если вы нетерпеливы, посмотрите Главу 4. Полезные сценарии SystemTap из руководства для начинающих.
источник
Сценарий SystemTap * :
Вывод выглядит так:
Или, если вы решите отображать только путь от точки монтирования:
Ограничения / баги:
devname
ЭТО"N/A"
devname
это"N/A"
Результаты для программ Мэтью Ифе :
для частного mmaptest :
для mmaptest поделился:
для диотеста (прямой ввод / вывод):
* Инструкции по быстрой установке для RHEL 6 или эквивалентного:
yum install systemtap
иdebuginfo-install kernel
источник
task_dentry_path
) :-) Я понятия не имею об этом вводе / выводе, но я могу проверить его, если вы дадите мне команду или образец программы. Например, я использовал Python для тестирования mmap.dd iflag=direct oflag=direct
появляется.Вы бы на самом деле хотели использовать
blktrace
для этого. См. Визуализация Linux IO с Seekwatcher и blktrace .Я посмотрю, смогу ли я опубликовать один из моих примеров в ближайшее время.
Редактировать:
Вы не упоминаете о дистрибуции Linux, но, возможно, это хороший случай для сценария dtrace в Linux или даже System Tap , если вы используете RHEL-подобную систему.
источник
Единственный инструмент, который я знаю об этом, может контролировать активность ввода / вывода по файлу
inotifywatch
. Это частьinotify-tools
пакета. К сожалению, это только дает вам счет операций.источник
используйте iotop, чтобы получить PID процессов, которые способствуют высокому IO
запустите strace для сгенерированного вами PID, вы увидите, к каким файлам обращается определенный процесс
источник
Я в конечном итоге использовал Sysdig для этого
источник
csysdig
, нажать F2 и выбратьFiles
просмотр. Вы увидите верхнюю часть доступных файлов по столбцу OPS (можно изменить, нажав F9).csysdig -v files
переходит непосредственно к представлению «Файлы»Я бы сказал, что вы могли задать не тот вопрос. Если вы ищете узкие места ввода / вывода, может быть также важно увидеть, что происходит на вашем диске. БД известны своими случайными операциями ввода-вывода, которые могут значительно снизить пропускную способность, особенно если у вас всего несколько шпинделей.
Что может быть более интересным, это посмотреть, если у вас есть длительное время ожидания на самих дисках. Вы можете сделать это с помощью collectl с помощью команды "collectl -sD", которая покажет статистику производительности отдельного диска. Есть - чтобы превратить его в топ-утилиту. Если задействовано много дисков, запустите его через colmux: colmux -command "-sD", и он позволит вам сортировать по столбцу по вашему выбору, даже в нескольких системах.
источник
Вы можете отслеживать ввод-вывод для каждого блочного устройства (через / proc / diskstats) и для каждого процесса (учет бухгалтерии через
/proc/$PID/io
или taskstats ), но я не знаю, как это сделать для каждого файла.источник
Может быть, inotify решит решить эту проблему.
API inotify предоставляет механизм для мониторинга событий файловой системы. Notify может использоваться для мониторинга отдельных файлов или для мониторинга каталогов. При мониторинге каталога inotify будет возвращать события для самого каталога и для файлов внутри каталога.
Мониторинг активности файловой системы с помощью inotify
ссылка
источник
lsof
)Хотя в ответах много полезной информации, мне интересно, действительно ли это применимо?
Если вы говорите о файлах в десятках гигабайт, которые постоянно записываются, то, если они не являются файлами журналов или аналогичными файлами, к которым постоянно добавляются (в этом случае только контролируют размеры файлов), скорее всего, файлы будут mmap'd , Если это так, то лучшим ответом может быть то, что вы должны перестать смотреть на большинство решений. Первое, что вы должны затем спросить о любом другом предложенном решении, это «работает ли оно с mmap», потому что в большинстве случаев это не так. Однако вы можете превратить проблему в мониторинг блочного устройства, а не в мониторинг файла.
Когда программа запрашивает страницу из файла mmap'd, она просто ссылается на местоположение в виртуальной памяти. Эта страница может быть или не быть уже в памяти. Если это не так, тогда генерируется сбой страницы, который вызывает загрузку страницы с диска, но это происходит в системе виртуальной памяти, которую нелегко привязать к конкретному процессу приложения или к определенному файлу. Точно так же, когда ваше приложение обновляет страницу mmap, в зависимости от флагов, это может не вызвать немедленную запись на диск, а в некоторых случаях может вообще не перейти на диск (хотя, вероятно, последние не интересуют вас) в).
Лучшее, что я могу придумать для файлов mmap'd, если это целесообразно для вас, - это поместить каждый интересующий файл на отдельное устройство и использовать статистику устройства для сбора информации об использовании. Вы можете использовать для этого разделы lvm. Тем не менее, связывание не будет работать, так как оно не создает новое блочное устройство.
Если у вас есть файлы на отдельных блочных устройствах, вы можете получить статистику из / sys / block / * или / proc / diskstats
Это может быть слишком разрушительным, чтобы представить это на рабочем сервере, но, возможно, вы можете использовать его.
Если файлы не отображаются, то да, вы можете выбрать одно из других решений здесь.
источник
Недавно я возился с коллекцией , она выглядит великолепно и довольно просто в установке. Самое интересное, что вы можете выяснить, кто является ответственным за узкие места ввода-вывода. Я бы порекомендовал вам прочитать Используя Collectl , это может быть полезно.
источник
Я бы порекомендовал вам проверить http://dag.wieers.com/home-made/dstat/ . Этот отличный инструмент позволяет проверить много статистики.
источник
Я думаю, что iotop является одним из лучших инструментов для Linux для выявления узких мест в IO.
источник
iotop
не следит за файлом, он работает за процесс