Ищу сценарий dtrace для отображения списка наиболее часто используемых файлов nfs
В настоящее время я использую https://github.com/siebenmann/cks-dtrace/blob/master/nfs3-mon.d для определения наиболее активных наборов данных на нашем сервере NFS (Solaris 10)
К сожалению, мне нужно копать глубже, и я хотел бы иметь возможность отслеживать наиболее часто используемые файлы. Есть ли способ перечислить топ X файлов для различных операций?
Я не Dtrace Guru и не смог найти ответ в течение нескольких часов..
1 ответ
Документы для поставщика 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 секунд.