寻找 dtrace 脚本来列出最常用的 nfs 文件

寻找 dtrace 脚本来列出最常用的 nfs 文件

我目前正在使用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 共享,但我认为它会起作用。)总结一下它正在做的事情:

  1. nfsv3:::op-{read|write}-start是 NFSv3 共享上开始读取或写入时触发的事件。每次发生这些事件时,事件都会获得一个args[1]包含变量 的参数noi_curpath,该变量提供文件的路径(如果可用;有时它没有缓存,因此您什么也得不到)。我们将其用作键,并使用发生count()这种情况的次数作为名为 的映射中的值@
  2. tick-10sec是脚本开始 10 秒后每 10 秒触发一次的事件。它首先使用 打印地图printa(),然后使用 清除其中的值,trunc()以便我们获得下一个 10 秒窗口的新数据。

相关内容