NFS服务器:CentOS7.1(内核3.10.0-229,nfs-utils 1.3.0)
一些客户端是使用 NFSv3 的 Ubuntu Precise (12.04)...它们运行良好。
有问题的客户端运行的是使用 NFSv4.1(或 NFSv4.0)的 CentOS7.1。大多数时候,一切正常。但有时,写入文件会导致 15 秒超时。这些是小文件(<10KiB)。
15 秒后,写入完成并且文件具有正确的内容。
最明显的一次是使用 vi 保存文件时。这种情况只发生大约 5% 的时间(但由于这太令人沮丧,感觉它发生的频率比实际要高)。
今天在对数百个文件(每个文件 2KiB - 5KiB)运行 rsync 时发生了这种情况。我能够在 rsync 进程上运行 strace,发现这种情况发生的频率超过 50%。
# sudo strace -ttt -T -p 14186
Process 14186 attached
1452694932.030892 select(9, [8], [], NULL, {55, 59875}) = 1 (in [8], left {44, 963900}) <10.096109>
1452694942.127262 read(8, "\4\0\0k\10\3\0\0", 8184) = 8 <0.000038>
1452694942.127378 select(9, [8], [], NULL, {60, 0}) = 1 (in [8], left {59, 997018}) <0.003029>
1452694942.130529 read(8, "\4\0\0k\t\3\0\0", 8184) = 8 <0.000040>
1452694942.130715 select(9, [8], [], NULL, {60, 0}) = 1 (in [8], left {44, 963694}) <15.036348>
1452694957.167236 read(8, "\4\0\0k\n\3\0\0", 8184) = 8 <0.000071>
1452694957.167419 select(9, [8], [], NULL, {60, 0}) = 1 (in [8], left {59, 996528}) <0.003572>
1452694957.171122 read(8, "\4\0\0k\v\3\0\0", 8184) = 8 <0.000112>
1452694957.171340 select(9, [8], [], NULL, {60, 0}) = 1 (in [8], left {44, 964372}) <15.035715>
1452694972.207210 read(8, "\4\0\0k\f\3\0\0", 8184) = 8 <0.000026>
1452694972.207303 select(9, [8], [], NULL, {60, 0}) = 1 (in [8], left {44, 960236}) <15.039908>
1452694987.247375 read(8, "\4\0\0k\r\3\0\0", 8184) = 8 <0.000111>
1452694987.247616 select(9, [8], [], NULL, {60, 0}) = 1 (in [8], left {44, 960455}) <15.039628>
1452695002.287486 read(8, "\4\0\0k\16\3\0\0", 8184) = 8 <0.000100>
1452695002.287665 select(9, [8], [], NULL, {60, 0}) = 1 (in [8], left {59, 996177}) <0.004000>
1452695002.291819 read(8, "\4\0\0k\17\3\0\0", 8184) = 8 <0.000089>
1452695002.292014 select(9, [8], [], NULL, {60, 0}) = 1 (in [8], left {44, 964982}) <15.035132>
1452695017.327303 read(8, "\4\0\0k\20\3\0\0", 8184) = 8 <0.000082>
1452695017.327491 select(9, [8], [], NULL, {60, 0}) = 1 (in [8], left {59, 995793}) <0.004300>
1452695017.331931 read(8, "\4\0\0k\21\3\0\0", 8184) = 8 <0.000052>
我还没看到其他人问过这个问题。只有我一个人问吗?
编辑:
安装选项:
nfs:/storage on /space type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=14,retrans=2,sec=sys,clientaddr=10.12.32.4,local_lock=none,addr=10.12.32.31)
/etc/exports 的内容:
/storage 10.0.0.0/8(rw,async,no_root_squash,no_subtree_check,mp=/storage)
答案1
在另一个 rsync 子进程上运行 strace,显示它在 rename() 调用期间挂起。这让我发现这是这个错误:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=799838
我已经通过设置安装选项解决了这个问题noatime
。