Хотя в ответах много полезной информации, мне интересно, действительно ли это применимо?
Если вы говорите о файлах в десятках гигабайт, которые постоянно записываются, то, если они не являются файлами журналов или аналогичными файлами, к которым постоянно добавляются (в этом случае только контролируют размеры файлов), скорее всего, файлы будут mmap'd , Если это так, то лучшим ответом может быть то, что вы должны перестать смотреть на большинство решений. Первое, что вы должны затем спросить о любом другом предложенном решении, это «работает ли оно с mmap», потому что в большинстве случаев это не так. Однако вы можете превратить проблему в мониторинг блочного устройства, а не в мониторинг файла.
Когда программа запрашивает страницу из файла mmap'd, она просто ссылается на местоположение в виртуальной памяти. Эта страница может быть или не быть уже в памяти. Если это не так, тогда генерируется сбой страницы, который вызывает загрузку страницы с диска, но это происходит в системе виртуальной памяти, которую нелегко привязать к конкретному процессу приложения или к определенному файлу. Точно так же, когда ваше приложение обновляет страницу mmap, в зависимости от флагов, это может не вызвать немедленную запись на диск, а в некоторых случаях может вообще не перейти на диск (хотя, вероятно, последние не интересуют вас) в).
Лучшее, что я могу придумать для файлов mmap'd, если это целесообразно для вас, - это поместить каждый интересующий файл на отдельное устройство и использовать статистику устройства для сбора информации об использовании. Вы можете использовать для этого разделы lvm. Тем не менее, связывание не будет работать, так как оно не создает новое блочное устройство.
Если у вас есть файлы на отдельных блочных устройствах, вы можете получить статистику из / sys / block / * или / proc / diskstats
Это может быть слишком разрушительным, чтобы представить это на рабочем сервере, но, возможно, вы можете использовать его.
Если файлы не отображаются, то да, вы можете выбрать одно из других решений здесь.