Есть ли какой-нибудь инструмент / команда, доступная в unix для мониторинга чтения / записи в конкретном файле.
Я также хочу собрать, сколько данных читается при каждом доступе к файлу.
Есть ли какой-нибудь инструмент / команда, доступная в unix для мониторинга чтения / записи в конкретном файле.
Я также хочу собрать, сколько данных читается при каждом доступе к файлу.
Короткий ответ, ни один из которых я не знаю.
vmstat
(запустите vmstat 1
чтобы сразу понять, что он делает; ^C
чтобы выйти) может показать вам полное использование системного ввода-вывода (столбцы BI
и BO
, блоки входов и выходов, вероятно, наиболее полезны сразу). Я нахожу это очень полезным в основном в тихих системах.
strace
(запустите strace -o /tmp/ls ls /tmp
; затем посмотрите файл /tmp/ls
чтобы увидеть, какие данные он вам дает) позволит вам следовать пути выполнения вашей программы через все вызовы write () и добавить Запрошенные размеры для любого дескриптора файла, который вас интересует. С положительной стороны, это может быть написано в сценарии и будет специально для этой программы для этого файла. С другой стороны, это замедлит выполнение вашей программы (возможно, она будет выполняться очень медленно) и полностью пропустит все операции дискового ввода-вывода, использующие области памяти mmap(2)
.
Вы можете написать библиотеку, которую вы загрузите с помощью переменной среды LD_PRELOAD
чтобы заменить read(2)
и write(2)
оболочками, которые выполняют ваш учет и вызывают системные вызовы (это почти наверняка не стоит хлопот). Также не удалось бы увидеть дисковый ввод-вывод, который использует mmap(2)
. У вас должна быть ужасная веская причина, чтобы пойти по этому пути.
Вы можете написать бэкэнд FUSE, чтобы вести учет. Это было бы медленно, и это замедлило бы каждый процесс, использующий эту файловую систему. Код FUSE также предоставляет множество внутренних компонентов ядра, которые ожидают, что быстрые результаты будут произвольно длинными (и, по меркам ядра) длительными задержками из-за программ пользовательского пространства. Программы могут вызвать нехватку памяти, обмен и дальнейший трафик диска. FUSE лучше всего развертывать в средах с большим объемом памяти, требованиями не в реальном времени и низкой стоимостью отказов.
Есть fam, http://en.wikipedia.org/wiki/File_alteration_monitor, но не уверен, доступен ли он для вашей ОС http://oss.sgi.com/projects/fam/
Также Google Inotify.
В linux ранее было несколько API для мониторинга активности файловой системы (dnotify и inotify), но последний называется fanotify
. LWN обсуждают API здесь .
Для мониторинга целых файловых систем есть iostat, то, что вы запрашиваете, похоже на iostat, но только для данного файла. Я не знаю о такой комбинации, но с помощью API вы можете написать свой собственный.