我想对我们的 NFS 服务器进行一些分析,以帮助追踪我们应用程序中的潜在瓶颈。该服务器正在运行 SUSE Enterprise Linux 10。
我想要了解的事情有:
- 哪些客户端正在访问哪些文件
- 每个客户端的读/写吞吐量
- 其他 RPC 调用造成的开销
- 等待其他 NFS 请求或磁盘 I/O 为客户端提供服务的时间
我已经知道了可用的统计数据/proc/net/rpc/nfsd
,事实上我写了一个博客文章深入描述它们。我正在寻找一种深入挖掘并帮助理解哪些因素影响了特定客户端所看到的性能的方法。我想分析 NFS 服务器在我们集群上的应用程序性能中所扮演的角色,以便我可以想出最佳优化方法。
答案1
只是一个想法,尝试使用 wireshark 嗅探 nfs 流量。可能会告诉您哪个用户访问了哪个文件:
tshark -R nfs -i eth0
答案2
我不得不说,在所有可用的 *stat 实用程序中,nfsstat 是迄今为止最糟糕的!它使您能够查看一堆计数器,但仅此而已。如果您查看它们两次,您必须尝试找出每个计数器的变化量,如果您想知道变化率,则需要除以样本之间的秒数。平心而论,nfsstat 确实可以追溯到很多年前,当时事情还很粗糙,现在没有人愿意改变输出格式,因为这可能会破坏很多东西,这阻碍了它的使用。
至于使用 collectl 来监控 nfs,它确实以更易于阅读的格式提供了 nfsstat 输出,但更好的是,您可以让它运行数小时或数天,并在后台回放您收集的数据。至于查看进程正在做什么的请求,collectl 还可以收集进程数据,包括每个进程正在执行多少 I/O,甚至可以回放它以显示排名靠前的 I/O 用户。您还可以实时使用 top 功能。
如果您想观看磁盘主题,自己 collectl 也可以这样做,并以协调的显示方式显示所有内容。
检查一下...-mark
答案3
收集(尤其是其NFS 子系统)是一个非常好的实用程序,可能对你的分析有用,但它确实不是符合您的要求列表。我不知道有任何 Linux 实用程序符合要求。
(请允许我补充一下题外话:是符合您要求的软件:Sun 的基于 DTrace 的分析 (pdf)- 但不幸的是,在 Linux 上不可用。您可以在Brendan Gregg 的博客说明了此工具的功能。
答案4
在我看来,这恰恰凸显了当今工具的问题。这里至少提到了 3 个,包括 nfsstat、iostat 和 iotop。然后顺便提到了 wireshare 和 nfsreplay。这听起来真的是一种正常的做事方式吗?除了 wireshark 之外,它自成一类,你难道不喜欢 1 个工具吗?
首先,虽然我发现 iostat 的输出非常有用,但是数字中那些 .00 太难读了。Collectl 报告的数据完全相同,但格式更直观。您已经知道我对 nfsstat 的看法,而且由于 collectl 可以回放任何数据,因此不需要“重放”实用程序。至于“iotop”,collect 还可以显示按任何包含的 I/O 排序的进程。
所以您已经拥有了所有内容,并附带时间戳。如果您需要更精细的监控间隔,您可以始终将采样时间缩短至 0.1 秒或 0.5 秒或介于两者之间的任何时间,尽管如果您以如此快的速度监控进程,您将产生更多开销,但使用任何进程监控实用程序都会如此。
最后的奖励是,您使用 collectl 收集的任何内容都可以加载到电子表格中并轻松绘图,或者使用 collectl-utils 的一部分 colplot。
-标记