分析Linux NFS服务器性能


22

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

我想知道的是:

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

我已经知道其中提供的统计信息,/proc/net/rpc/nfsd实际上我写了一篇博客文章来详细介绍它们。我正在寻找的是一种方法,可以进行更深入的研究,并帮助您了解哪些因素对特定客户所看到的性能有所贡献。我想分析NFS服务器在集群上应用程序的性能中扮演的角色,以便我想出最佳方法来对其进行优化。


这似乎是系统tap编写的那种东西。这些文档有点废话,但是我想您可以使用它进行一些分析。 sourceware.org/systemtap/examples/keyword-index.html
Cian

Answers:


2

只是一个想法,请尝试使用Wireshark嗅探NFS流量。可能会告诉您哪个用户访问了什么文件:

tshark -R nfs -i eth0

2

我不得不说一个人可以使用的所有不同的* stat实用程序,nfsstat到目前为止是最糟糕的!它使您能够查看大量计数器,仅此而已。如果您两次查看它们,则必须进行尝试找出每个计数器变化了多少的工作,并且如果您想知道变化率,则需要除以两次采样之间的秒数。公平地说,nfsstat的确可以追溯到很多年前,当时事情还很原始,现在又因为没有人愿意更改输出格式而受到阻碍,因为它可能会破坏很多事情。

至于使用collectl监视nfs,它确实以一种更易于阅读的格式提供nfsstat输出,但是更好的是,您可以让它运行数小时或数天,并在后台播放您收集的数据。至于查看进程正在执行的请求,collectl还可以收集进程数据,包括每个进程正在执行的I / O数,甚至可以回放显示最高I / O用户数。您还可以实时使用顶级功能。

如果您想观看磁盘主题,则selfcollectl也可以这样做,并以协调的方式显示所有内容。

看看... -mark


2

collectl(尤其是其NFS子系统)是一个非常不错的实用程序,它可能对您的分析有用,但与您的需求列表匹配。我不知道有任何Linux实用程序。

(请让我补充这个题外话注:有符合你要求的软件:Sun基于DTrace的- 分析(PDF格式) -但不幸的是,不可用在Linux上你会发现很多的很好的例子,在布伦丹·格雷格的博客这说明该工具的功能。)



1

我认为,这恰恰突出了当今工具的问题。在这里,我们至少提到了3个,包括nfsstat,iostat和iotop。然后提到了关于wireshare和nfsreplay的内容。这听起来真的像是正常的做事方式吗?除了wireshark以外,它都是一个类别,您不喜欢一种工具吗?

对于开瓶器,虽然我发现iostat的输出非常有用,但很难理解数字中的所有.00。Collectl会报告完全相同的数据,但格式要容易得多。您已经知道我对nfsstat的看法,并且由于collectl可以播放任何数据,因此不需要“重放”实用程序。至于“ iotop”,collect还可以显示按任何I / O排序的进程。

因此,您也可以拥有全部功能,并附带时间戳。如果需要更佳的监视间隔,则可以将采样时间缩短到0.1或0.5秒,或者介于两者之间,尽管如果您以这种速度监视进程会产生更多的开销,但是使用任何进程监视实用程序都可以。

最终的好处是,您可以使用collectl收集任何东西,您可以将其加载到电子表格中并轻松进行绘图,也可以使用collectl-utils中的colplot。

-标记


1

您可能要尝试nfswatchhttp://nfswatch.sourceforge.net尝试

您可以在http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/查看一些示例输出。

nfswatch有点像top(尽管我不确定是否有批处理模式)。一旦运行,您可以通过按一个键来更改显示内容(例如,使用“ c”以使用您的NFS服务器显示NFS客户端)。

但是,在我的简短测试中,nfswatch它似乎不适用于NFSv4。


1
有趣的建议。实际上,作者本身说不支持NFSv4,并且该工具大约3年没有更新。可惜,因为它会很有用!
Tonin

1

我目前没有更好的答案,但是您可以使用

iostat -mx <delay in sec.> <devices>

它提供了非常有用的数据,尤其是IO的平均队列大小和等待时间(以毫秒为单位)。如果磁盘是瓶颈,并且瓶颈是IO计数或吞吐量,它就会很容易地显示出来。

然后用

netstat -plaute | grep nfs

您将实时查看客户端连接和从每个客户端传输的字节。在其上循环以获取连续数据。制作一个可以提供连续数据的脚本非常容易……我正在努力:)

现在,要获得每个进程的IO,您可以使用出色的iotop。但是,您仍然必须找到一种将nfsd进程与客户端进行匹配的方法。

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

只是为了在netstat上进行扩展,请使用watch -d查看事物如何更改并按主机排序

watch -d "netstat -plaute | grep nfs | sort -k 4,5"

这是迄今为止我发现的最佳解决方案,以找出导致NFS上流量的主机。然后,我可以去客户端找出它访问哪个文件。谢谢!
peschü

0

您可能想查看nfsreplay。它可以帮助您了解正在发生的事情。另外,您可能会在这里找到有用的信息和链接

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.