使用nfsstat -c ,我看到在我的NFS客户端计算机上有一个很高的“authrefrsh”(在某些系统上称为“newcred”),用于像ls这样的操作,并在包含〜1000个文件的目录上find 。 这与非常差的performance相关(20分钟以上的目录列表)。 caching的NFS操作不会出现这种行为(authrefrsh或减速)。
authrefrsh =每次检查nfsstat时调用:
$ nfsstat -c Client rpc stats: calls retrans authrefrsh 280462 0 280462 Client nfs v3: null getattr setattr lookup access readlink 0 0% 126990 45% 0 0% 10062 3% 58592 20% 0 0% read write create mkdir symlink mknod 25030 8% 0 0% 65 0% 0 0% 2 0% 0 0% remove rmdir rename link readdir readdirplus 0 0% 0 0% 0 0% 0 0% 0 0% 59654 21% fsstat fsinfo pathconf commit 0 0% 20 0% 10 0% 0 0%
连接细节:
$ mount.nfs -v nfshost:/share/dir /somedir mount.nfs: timeout set for Tue Feb 21 18:12:18 2012 mount.nfs: trying text-based options 'vers=4,addr=192.168.xx.xx,clientaddr=192.168.xx.xx' mount.nfs: mount(2): Operation not permitted mount.nfs: trying text-based options 'addr=192.168.xx.xx' mount.nfs: prog 100003, trying vers=3, prot=6 mount.nfs: trying 192.168.xx.xx prog 100003 vers 3 prot TCP port 2049 mount.nfs: prog 100005, trying vers=3, prot=17 mount.nfs: trying 192.168.xx.xx prog 100005 vers 3 prot UDP port 1011 nfshost:/share/dir on /somedir type nfs
nfshost RPC环境:
$ rpcinfo -T udp nfshost nfs program 100003 version 2 ready and waiting program 100003 version 3 ready and waiting program 100003 version 4 ready and waiting $ rpcinfo -T udp nfshost mountd program 100005 version 1 ready and waiting program 100005 version 2 ready and waiting program 100005 version 3 ready and waiting $ rpcinfo -T udp nfshost nlockmgr program 100021 version 1 ready and waiting rpcinfo: RPC: Program/version mismatch; low version = 1, high version = 4 program 100021 version 2 is not available program 100021 version 3 ready and waiting program 100021 version 4 ready and waiting $ rpcinfo -T udp nfshost llockmgr rpcinfo: RPC: Program not registered $ rpcinfo nfshost program version netid address service owner 100000 2 tcp 0.0.0.0.0.111 portmapper unknown 100000 2 udp 0.0.0.0.0.111 portmapper unknown 100024 1 udp 0.0.0.0.2.212 status unknown 100024 1 tcp 0.0.0.0.2.215 status unknown 100021 1 udp 0.0.0.0.226.67 nlockmgr unknown 100021 3 udp 0.0.0.0.226.67 nlockmgr unknown 100021 4 udp 0.0.0.0.226.67 nlockmgr unknown 100021 1 tcp 0.0.0.0.134.55 nlockmgr unknown 100021 3 tcp 0.0.0.0.134.55 nlockmgr unknown 100021 4 tcp 0.0.0.0.134.55 nlockmgr unknown 100011 1 udp 0.0.0.0.3.230 rquotad unknown 100011 2 udp 0.0.0.0.3.230 rquotad unknown 100011 1 tcp 0.0.0.0.3.233 rquotad unknown 100011 2 tcp 0.0.0.0.3.233 rquotad unknown 100003 2 udp 0.0.0.0.8.1 nfs unknown 100003 3 udp 0.0.0.0.8.1 nfs unknown 100003 4 udp 0.0.0.0.8.1 nfs unknown 100003 2 tcp 0.0.0.0.8.1 nfs unknown 100003 3 tcp 0.0.0.0.8.1 nfs unknown 100003 4 tcp 0.0.0.0.8.1 nfs unknown 100005 1 udp 0.0.0.0.3.243 mountd unknown 100005 1 tcp 0.0.0.0.3.246 mountd unknown 100005 2 udp 0.0.0.0.3.243 mountd unknown 100005 2 tcp 0.0.0.0.3.246 mountd unknown 100005 3 udp 0.0.0.0.3.243 mountd unknown 100005 3 tcp 0.0.0.0.3.246 mountd unknown
环境:
$ uname -a Linux whiteheat 3.0.0-15-generic #26-Ubuntu SMP Fri Jan 20 17:23:00 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux $ mount.nfs ab -V mount.nfs: (linux nfs-utils 1.2.4)
我遇到了与NFS确切的问题。 在我的情况下,问题是由actimeo设置太低造成的。 虽然你可能没有使用这个确切的设置,但是还有一系列的设置会导致严重的后果:acregmin,acregmax,acdirmin和acdirmax。 本质上,系统正在从NFS中caching文件属性。 这些设置会影响在从NFS刷新之前保留文件属性的时间。 在使用率很高的系统中,这些刷新变得非常明显。
另一个有问题的设置是noac 。 如果你使用这个,你保证任何写入都将立即提供给所有其他客户端。 但是,写入操作将等到完成写入远程,而不是使用后写。 如果频繁写入NFS,这可能会使系统瘫痪。
这是一篇有趣的博客文章,他们谈论不同的选项及其对NFS性能的影响。 您也可以查看NFS的手册页获取更多指导。 不幸的是,authrefrsh可能是一个红鲱鱼和我的问题可能是完全不相关的,尽pipe类似的症状。