Я сейчас использую https://github.com/siebenmann/cks-dtrace/blob/master/nfs3-mon.d для определения наиболее активных наборов данных на нашем сервере NFS (Solaris 10)
К сожалению, мне нужно копнуть глубже, и я хотел бы иметь возможность отслеживать наиболее используемые файлы. Есть ли способ составить список самых популярных X-файлов для различных операций?
Я не гуру dtrace и не смог найти ответ за несколько часов ..
Документация для поставщика NFS DTrace довольно хороша на Сайт Oracle. Особенно полезными для вас сценариями являются nfsv3fileio.d
или (чтобы получить много больше данных, которые могут потребоваться для постобработки) nfsv3rwsnoop.d
.
Предполагая, что вы имеете в виду «наиболее часто используемые» как «наибольшее количество операций чтения / записи», и вас не волнует соотношение между теми или теми, кто их делает, простой скрипт для печати имен файлов и количества операций ввода-вывода для каждого из них. является:
nfsv3:::op-read-start, nfsv3:::op-write-start {
@[args[1]->noi_curpath] = count();
}
tick-10sec {
printa(@);
trunc(@);
}
(Я не запускал это, потому что у меня нет настроенных общих ресурсов NFS, но я думаю, что это сработает.) Подведем итог тому, что он делает:
nfsv3:::op-{read|write}-start
- это события, которые запускаются, когда начинается чтение или запись в общей папке NFSv3. Каждый раз, когда происходит одно из таких событий, событие получает аргумент args[1]
который содержит переменную noi_curpath
, который дает путь к файлу (если он доступен; иногда он не кэшируется, поэтому вы ничего не получаете). Мы используем это как ключ и используем count()
иногда это происходит как значение на карте с именем @
.tick-10sec
- событие, которое запускается каждые 10 секунд, начиная с 10 секунд после запуска скрипта. Сначала он печатает карту с printa()
, а затем очищает значения в нем с помощью trunc()
так что мы получаем свежие данные для следующего 10-секундного окна.