我想对我们的NFS服务器做一些分析,以帮助我们追踪应用程序中潜在的瓶颈。 服务器正在运行SUSE Enterprise Linux 10。
我想知道的事情是:
我已经知道/proc/net/rpc/nfsd
的统计信息,实际上我写了一篇博文来深入描述它们。 我正在寻找的是深入挖掘并帮助理解哪些因素对特定客户所看到的performance有所贡献的方法。 我想分析一下NFS服务器在集群上应用程序性能的作用,这样我就可以想出最佳的方法。
只是一个想法,尝试用wireshark嗅探nfsstream量。 可能会告诉你哪个用户访问了哪个文件:
tshark -R nfs -i eth0
我不得不说,所有不同的* stat实用程序可用于一个,nfsstat是迄今为止最糟糕的! 它使您能够查看一堆计数器,但仅此而已。 如果你看两次,你必须做一些工作,试图找出每个计数器有多less变化,如果你想知道变化率,则需要除以样本之间的秒数。 平心而论,nfsstat的历史可以追溯到很多年,当时情况还非常糟糕,而且现在又因为没有人想改变输出格式而受到阻碍,因为它可能会破坏很多东西。
至于使用collectl来监视nfs,它提供了一个更易于阅读的格式的nfsstat输出,但更好的是你可以让它运行几个小时或几天,并回放你在后台收集的数据。 对于查看哪些进程正在进行的请求,collectl还可以收集过程数据,包括每个进程正在执行多lessI / O,甚至可以回放显示顶级I / O用户。 您也可以实时使用顶级function。
如果你想观看磁盘主题自我collectl可以做到这一点,并显示在协调的显示一切。
看看…标志
collectl (尤其是它的NFS子系统 )是一个非常好的实用工具,可能对您的分析有用,但与您的需求清单不匹配。 我不知道有任何Linux实用程序。
(请允许我添加这个离题的注释:有一些软件可以满足您的需求:Sun基于DTrace的分析(pdf) – 但不幸的是在Linux上不可用。在Brendan Gregg的博客中可以find很多很好的例子,这个工具的function。)
看看nfsstat。 它不显示你想要的一切,但至less有一个很好的子集。
在我看来,这恰恰突出了当今工具的问题。 在这里我们至less提到了3个,包括nfsstat,iostat和iotop。 然后就有了wirehare和nfsreplay的提及。 这听起来像是一种正常的做事方式吗? 除wireshark之外的其他类别都是它自己的,你不喜欢1个工具吗?
对于开门人来说,虽然我发现iostat的输出非常有用,但是用数字中的所有.00读起来太难了。 Collectl报告完全相同的数据,但格式化更容易的眼睛。 你已经知道我对nfsstat的看法,因为collectl可以播放任何数据,所以不需要“重放”工具。 至于'iotop',collect还可以显示按任何I / Osorting的进程。
所以,你也有一切,有时间戳。 如果您需要更好的监控时间间隔,则可以将采样时间恢复为0.1或0.5秒,或者两者之间的任何时间,但是如果您快速监控进程,但是会使用任何进程监控实用程序,则会产生更多开销。
最后的好处是你用collectl收集的任何东西都可以加载到电子表格中,并且可以很容易地绘制出来,或者使用collectl-utils的一部分colplot。
-标记
你可能想从http://nfswatch.sourceforge.net尝试nfswatch
nfswatch
是有点像top
(虽然我不知道是否有一个批处理模式)。 一旦运行,您可以通过按键来更改显示(例如,“c”使用您的NFS服务器显示NFS客户端)。
然而,在我的简短testing中, nfswatch
似乎不适用于NFSv4。
你可能想看看nfsreplay。 这可能会帮助你弄清楚发生了什么事情。 你也可以在这里find有用的信息和链接
目前我没有更好的答案,但是你可以非常精确地跟随磁盘IO
iostat -mx <delay in sec.> <devices>
它提供了非常有用的数据,尤其是IO的平均队列大小和等待时间(以毫秒为单位)。 如果您的磁盘是瓶颈,并且瓶颈是IO计数或吞吐量,则会很容易显示。
然后用
netstat -plaute | grep nfs
您将看到客户端连接和实时从每个客户端传输的字节。 循环它连续的数据。 制作提供连续数据的脚本将是相当容易的…我正在研究它:)
现在要获得每个进程的IO,可以使用优秀的iotop 。 不过,您仍然需要find一种方法将nfsd进程与客户端进行匹配。
至于哪个客户端正在访问哪个文件,我卡住了。 实际上,当前从NFS客户端读取/写入的文件甚至不会出现在lsof输出中。
只需展开netstat,使用watch -d来查看主机如何更改和sorting
watch -d "netstat -plaute | grep nfs | sort -k 4,5"