现象描述
在通过OpenVPN使用NFS共享时,发现emerge
操作性能明显下降。使用nfsstat -c
监控发现authrefrsh
字段数值异常:
$ watch -n 1 nfsstat -c
Client rpc stats:
calls retrans authrefrsh
308565 2211 308565
关键字段解析
authrefrsh
(旧版称为newcreds
)表示NFS客户端刷新认证凭据的次数。在Linux内核2.6.38及nfs-utils 1.2.3版本中,该字段的异常增长通常意味着:
- RPC身份验证令牌过期频繁
- VPN隧道导致的网络延迟触发重新认证
- Kerberos或AUTH_SYS配置问题
典型问题场景
通过OpenVPN使用NFS时常见以下问题模式:
# 查看当前RPC调试信息
$ cat /proc/net/rpc/auth.unix/channel
$ cat /proc/net/rpc/auth.unix/flavor
典型表现为:
- 每次文件操作都伴随认证刷新
- VPN网络延迟超过默认的RPC超时时间
- 客户端/服务器时间不同步
解决方案
1. 调整RPC超时参数
# 在客户端/etc/nfsmount.conf中增加:
[ NFSMount_Global_Options ]
Defaultvers=3
Acregmin=5
Acregmax=15
Acdirmin=5
Acdirmax=15
2. 优化VPN MTU设置
# 在OpenVPN配置中添加:
tun-mtu 1500
fragment 1300
mssfix 1300
3. 检查时间同步
# 确保NTP服务正常运行
$ ntpq -p
$ chronyc sources
性能对比测试
优化前后使用dd测试写入速度:
# 测试命令
$ dd if=/dev/zero of=/mnt/nfs/testfile bs=1M count=1024
# 优化前
1048576 bytes (1.0 GB) copied, 12.34 s, 85.0 MB/s
# 优化后
1048576 bytes (1.0 GB) copied, 4.56 s, 230 MB/s
深入原理
NFSv3的认证刷新机制涉及以下内核参数:
# 查看当前设置
$ sysctl sunrpc.tcp_slot_table_entries
sunrpc.tcp_slot_table_entries = 16
# 建议调整为:
$ echo "sunrpc.tcp_slot_table_entries=64" >> /etc/sysctl.conf
对于高延迟网络,建议同时调整:
sunrpc.tcp_max_slot_table_entries=256
sunrpc.udp_slot_table_entries=64