我想对我们的 NFS 服务器进行一些分析,以帮助追踪我们应用程序中的潜在瓶颈。服务器正在运行 SUSE Enterprise Linux 10。
我想知道的事情是:
- 哪些客户端正在访问哪些文件
- 每个客户端的读/写吞吐量
- 其他 RPC 调用带来的开销
- 等待其他 NFS 请求或磁盘 I/O 以服务客户端所花费的时间
我已经知道可用的统计数据/proc/net/rpc/nfsd
,事实上我写了一篇博客文章深入描述了它们。我正在寻找的是一种更深入地挖掘并帮助了解哪些因素会影响特定客户所看到的性能的方法。我想分析 NFS 服务器在我们集群上的应用程序性能中所起的作用,以便我能想出最佳优化它的方法。
只是一个想法,尝试使用wireshark 嗅探nfs 流量。可能会告诉您哪个用户访问了哪个文件:
collectl(尤其是它的NFS 子系统)是一个非常好的实用程序,它可能对您的分析有用,但它与您的需求列表不匹配。我不知道有任何 Linux 实用程序可以这样做。
(请让我添加此题外话:有符合您要求的软件:Sun 的基于 DTrace 的分析 (pdf) - 但不幸的是在 Linux 上不可用。您会在Brendan Gregg 的博客中找到很多很好的示例来说明此工具的功能。)
我不得不说,在可供一个人使用的所有不同的 *stat 实用程序中,nfsstat 是迄今为止最糟糕的!它使您能够查看一堆计数器,仅此而已。如果您查看它们两次,您必须尝试找出每个计数器更改了多少,如果您想知道更改率,则需要除以样本之间的秒数。平心而论,nfsstat 确实可以追溯到很多年前,当时事情仍然很粗糙,现在由于没有人想要更改输出格式而受到阻碍,因为它可能会破坏很多东西。
至于使用 collectl 监控 nfs,它确实以更易于阅读的格式提供 nfsstat 输出,但更好的是,您可以让它运行数小时或数天,并在后台播放您收集的数据。至于查看进程在做什么的请求,collectl 还可以收集进程数据,包括每个进程正在执行多少 I/O,甚至可以回放显示顶级 I/O 用户。您还可以实时使用顶级功能。
如果您想观看磁盘主题,collectl 也可以这样做,并以协调的方式显示所有内容。
看看... - 标记
目前我没有更好的答案,但是您可以非常精确地跟踪磁盘 IO
它提供了非常有用的数据,尤其是 IO 的平均队列大小和等待时间(以毫秒为单位)。它很容易显示您的磁盘是否是瓶颈,以及瓶颈是 IO 计数还是吞吐量。
然后与
您将实时看到客户端连接和从每个客户端传输的字节。循环它以获得连续数据。制作一个提供连续数据的脚本会很容易......我正在努力:)
现在要获得每个进程的 IO,您可以使用出色的iotop。不过,您仍然必须找到一种方法来将 nfsd 进程与客户端匹配。
至于哪个客户端正在访问哪些文件,我被卡住了。实际上,当前从 NFS 客户端读取/写入的文件甚至不会出现在 lsof 输出中。
只是为了扩展 netstat,使用 watch -d 查看事情如何变化并按主机排序
查看 nfsstat。它没有显示您想要的所有内容,但至少显示了一个很好的子集。
http://linux.die.net/man/8/nfsstat
在我看来,这恰恰突出了当今工具的问题。这里我们至少提到了 3 个,包括 nfsstat、iostat 和 iotop。然后顺便提到了wireshare和nfsreplay。这听起来真的是一种正常的做事方式吗?除了wireshark 之外,它本身就是一个类别,您不喜欢1 个工具吗?
对于开场白,虽然我发现 iostat 的输出非常有用,但数字中的所有 .00 都很难阅读。Collectl 报告完全相同的数据,但格式更容易让人眼前一亮。您已经知道我对 nfsstat 的看法,并且由于 collectl 可以回放任何数据,因此不需要“重播”实用程序。至于 'iotop',collect 还可以显示按包括 I/O 在内的任何内容排序的进程。
因此,您也拥有所有内容,并带有时间戳。如果您需要更精细的监控间隔,您始终可以将采样时间调回到 0.1 或 0.5 秒或介于两者之间的任何时间,尽管如果您以如此快的速度监控进程,则会产生更多开销,但使用任何进程监控实用程序都会产生更多开销。
最后的好处是您使用 collectl 收集的任何内容,您可以将其加载到电子表格中并轻松绘制或使用 colplot,它是 collectl-utils 的一部分。
-标记
nfswatch
您可能想从http://nfswatch.sourceforge.net尝试您可以在http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/看到一些示例输出
nfswatch
有点像top
(虽然我不确定是否有批处理模式)。一旦它运行,您可以通过点击一个键来更改显示(例如“c”以显示使用您的 NFS 服务器的 NFS 客户端)。然而,在我的简短测试中,
nfswatch
似乎不适用于 NFSv4。您可能想查看 nfsreplay。它可能会帮助您弄清楚发生了什么。此外,您可能会发现此处的信息和链接很有用