让我先解释一下这个场景。我知道这种设置听起来可能很荒谬,但是一旦我解释了我看到的情况,如果有人知道得更多,可以解释为什么会发生这种情况,我将不胜感激。
我有 2 个站点。它们都位于美国大陆的两端。这些服务器通过 10Gb 点对点链路连接,延迟大约为 ~67ms。我在一端有一个 NFS 共享,在另一端有一个需要挂载此 NFS 共享的服务器。在初始挂载时,运行时间树会给出如下输出:
[root@server01 ~]# time tree /usr/local/ftppub/production/biz_12345
/usr/local/ftppub/production/biz_12345
└── incoming
├── inbound
....
├── test
│ └── OVR_DS_MASTER.csv
├── test1.csv
├── test2.csv
└── to_be_deleted
└── payments.csv
23 directories, 2229 files
real 0m9.636s
user 0m0.013s
sys 0m0.047s
[root@server01 ~]#
注意真实的时间大概是10秒左右。
但是,当我第二次以及随后的任何时间运行相同的查询时,时间是原来的 12 倍:
[root@server01 ~]# time tree /usr/local/ftppub/production/biz_12345
/usr/local/ftppub/production/biz_12345
└── incoming
├── inbound
....
├── test
│ └── OVR_DS_MASTER.csv
├── test1.csv
├── test2.csv
└── to_be_deleted
└── payments.csv
23 directories, 2229 files
real 1m55.544s
user 0m0.026s
sys 0m0.137s
[root@server01 ~]#
cat /pro/mounts 为该挂载提供以下设置:
1.2.3.4:/FTP /usr/local/ftppub nfs rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=1.2.3.4,mountvers=3,mountport=2049,mountproto=udp,local_lock=none,addr=1.2.3.4 0 0
这些是服务器在挂载此 NFS 共享时生成的默认挂载。我尝试过调整这些参数,但情况并没有好转,反而影响了对此 NFS 共享的访问。无法理解的是,为什么第一次读取此文件夹结构的速度比所有后续读取都快 12 倍?我原以为问题出在树,但测试相同的杜给出相同的结果。第一个 du 命令的读取时间约为 10 秒,所有后续杜命令到同一目录会产生将近 2 分钟的输出。在我挂载 NFS 后第一次尝试读取任何新目录时都会发生这种情况,从同一目录的任何后续读取都会减慢约 12 倍。