我管理着一个安装有 1 个运行 Ubuntu 12.04 的服务器和 60 个运行 raspbian 的 Raspberry Pi 微控制器的安装。每个 Pi 都从服务器安装一个 NFS 驱动器以读取新代码并存储日志。
我们遇到了严重的网络延迟,服务器的输入和输出字节数急剧增加(500 kB/s 到 8 MB/s)。
在执行 nfsstat 后,我注意到几乎所有调用都是“setcltid”和“setcltidconf”。我无法在任何地方找到这些调用的描述(谷歌、man nfs / nfsstat、这里),但有些东西告诉我它们不应该占所有调用的 99.99999%。以下是 nfsstat 输出:
Server rpc stats:
calls badcalls badclnt badauth xdrcall
79155136 0 0 0 0
Server nfs v3:
null getattr setattr lookup access readlink
1 100% 0 0% 0 0% 0 0% 0 0% 0 0%
read write create mkdir symlink mknod
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
remove rmdir rename link readdir readdirplus
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
fsstat fsinfo pathconf commit
0 0% 0 0% 0 0% 0 0%
Server nfs v4:
null compound
4 0% 79057350 99%
Server nfs v4 operations:
op0-unused op1-unused op2-future access close commit
0 0% 0 0% 0 0% 14461 0% 27901 0% 0 0%
create delegpurge delegreturn getattr getfh link
0 0% 0 0% 0 0% 93133 0% 36808 0% 0 0%
lock lockt locku lookup lookup_root nverify
0 0% 0 0% 0 0% 2927 0% 0 0% 0 0%
open openattr open_conf open_dgrd putfh putpubfh
66698 0% 0 0% 2586 0% 8 0% 128989 0% 0 0%
putrootfh read readdir readlink remove rename
3998 0% 1810 0% 13 0% 92 0% 0 0% 0 0%
renew restorefh savefh secinfo setattr setcltid
10299 0% 0 0% 0 0% 0 0% 370 0% 39754648 49%
setcltidconf verify write rellockowner bc_ctl bind_conn
39689677 49% 0 0% 7319 0% 0 0% 0 0% 0 0%
exchange_id create_ses destroy_ses free_stateid getdirdeleg getdevinfo
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
getdevlist layoutcommit layoutget layoutreturn secinfononam sequence
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
set_ssv test_stateid want_deleg destroy_clid reclaim_comp
0 0% 0 0% 0 0% 0 0% 0 0%
Client rpc stats:
calls retrans authrefrsh
0 0 0
如果有人能提供任何建议我将不胜感激。
答案1
您在客户端上的设置是什么clientaddr
?听起来和这个错误:
当 clientaddr=0.0.0.0 时,nfsstat -s 显示服务器上的“setcltid”和“setcltidconf”操作快速增加,并且由于写入 v4recovery 信息导致根卷上的 IO 利用率很高。