Инструмент для мониторинга чтения / записи файлов в Unix

1

Есть ли какой-либо инструмент / команда, доступная в unix для мониторинга чтения / записи в конкретном файле.

Я также хочу собрать, сколько данных читается при каждом доступе к файлу.

Der Hochstapler
источник
1
Какой сорт Unix?
Деннис Уильямсон

Ответы:

0

Короткий ответ, ни один из которых я не знаю.

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 лучше всего развертывать в средах с большим объемом памяти, требованиями не в реальном времени и низкой стоимостью сбоев.

sarnold
источник
0

В Linux было несколько API-интерфейсов для мониторинга активности файловой системы (dnotify и inotify), но последний из них называется fanotify. LWN обсуждают API здесь .

Для мониторинга целых файловых систем есть iostat , то, что вы запрашиваете, похоже на iostat, но только для данного файла. Я не знаю о такой комбинации, но с помощью API вы можете написать свой собственный.

hlovdal
источник
1
Почему это было модернизировано? Я использовал inotify в прошлом, и это было довольно круто?
songei2f
0

В Linux вы можете использовать incron . На Solaris / BSD вы, вероятно, сможете получить информацию, используя DTrace .


источник