我目前正在使用https://github.com/siebenmann/cks-dtrace/blob/master/nfs3-mon.d识别 NFS 服务器上最活跃的数据集 (Solaris 10)
不幸的是,我需要深入挖掘,并且我希望能够找到最常用的文件。有没有办法列出各种操作的前 X 个文件?
我不是 dtrace 专家,几个小时内也无法找到答案。
答案1
NFS DTrace 提供程序的文档非常好Oracle 网站对你来说特别有用的脚本是nfsv3fileio.d
或(获取很多您可能需要进行后期处理的更多数据)nfsv3rwsnoop.d
。
假设您的意思是“最常用”的“读/写次数最多”,并且您不关心它们之间的比例或谁在执行这些操作,那么打印文件名和每个文件的 IO 计数的简单脚本是:
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 秒窗口的新数据。