分析 Linux NFS 服务器性能

Kam*_*iel 23 linux performance nfs

我想对我们的 NFS 服务器进行一些分析,以帮助追踪我们应用程序中的潜在瓶颈。服务器正在运行 SUSE Enterprise Linux 10。

我想知道的事情是:

  • 哪些客户端正在访问哪些文件
  • 基于每个客户端的读/写吞吐量
  • 其他 RPC 调用造成的开销
  • 等待其他 NFS 请求或磁盘 I/O 为客户端提供服务所花费的时间

我已经知道可用的统计数据/proc/net/rpc/nfsd,事实上我写了一篇博客文章深入描述了它们。我正在寻找的是一种深入挖掘并帮助了解影响特定客户所见性能的因素的方法。我想分析 NFS 服务器在我们集群上的应用程序性能中扮演的角色,以便我可以想出最佳优化它的方法。

waz*_*oox 1

我目前没有更好的答案,但是您可以非常精确地跟踪磁盘 IO

iostat -mx <delay in sec.> <devices>
Run Code Online (Sandbox Code Playgroud)

它提供了非常有用的数据,特别是 IO 的平均队列大小和等待时间(以毫秒为单位)。它很容易显示您的磁盘是否是瓶颈,以及瓶颈是否是 IO 计数或吞吐量。

然后与

netstat -plaute | grep nfs
Run Code Online (Sandbox Code Playgroud)

您将实时看到客户端连接和从每个客户端传输的字节。循环获取连续数据。制作一个提供连续数据的脚本非常容易......我正在研究它:)

现在要获取每个进程的 IO,您可以使用优秀的iotop。不过,您仍然需要找到一种方法来将 nfsd 进程与客户端相匹配。

至于哪个客户端正在访问哪些文件,我很困惑。实际上,当前从 NFS 客户端读取/写入的文件甚至不会出现在 lsof 输出中。

只是为了扩展 netstat,使用 watch -d 来查看情况如何变化并按主机排序

watch -d "netstat -plaute | grep nfs | sort -k 4,5"
Run Code Online (Sandbox Code Playgroud)