我有一系列脚本正在执行许多 svn 操作,并且耗时太长,我们不确定原因。例如
svn switch svn+ssh://srv/repo/... ...
这通常需要大约 1.1 秒。我们在 RHEL 5.4 上使用 subversion 1.6.6。
时间ssh srv exit
约为 80 毫秒(我们一直在努力降低这个时间)!因此时间是不是在 ssh 中花费。
strace
在客户端和服务器上运行,我看到这个(sv
服务器上是 svnserve,cl
是客户端):
sv 08:29:43.470772 close(4) = 0
sv 08:29:43.470839 unlink("/tmp/tempfile.tmp") = 0
sv 08:29:43.470937 write(1, "( success ( ) ) ", 16) = 16
sv 08:29:43.471062 read(0, "", 4096) = 0
cl 08:29:44.019452 unlink("/export/.../.svn/lock") = 0
因此,似乎有半秒钟的时间被卡住了,等待最后一次读取完成。查看源代码,我猜这是 apr 库中的读取超时。虽然 subversion 调用库时超时时间不为零(忽略 HTML),但我没有看到这一点。
有没有办法可以缩短这个超时时间或者显著改善命令周转时间?
如果我们知道这会有所帮助,我们可以更新服务器版本,但无法升级客户端版本(因为大约有 500 个客户端系统正在使用)。如果需要,我们可以重新编译服务器或客户端。
谢谢