我们公司的 SVN 服务器是自行设置的,托管在 EC2 上,速度非常慢。该设置基于 Apache 和 mod_dav_svn。还有一个 svnserve 正在运行,似乎由 CI 系统使用。我们可以使用带有服务器和客户端证书的 SSL 访问存储库,我在使用 Wireshark 监控提交时注意到了一件奇怪的事情。
我原本以为会有一个 SSL 握手来建立连接,并且该连接会在会话中重复使用。然而,似乎每 200ms/10kb 就会有一个新 TCP 连接和新的 SSL 握手(由于证书,其有效负载比 SVN 流量本身更高)。
SVN 提交期间的对话。请注意,每个连接最多传输 10kb 的数据。
以数据包形式开始提交。据我所知,服务器发送加密警报以关闭 SSL 连接。然后您会看到下一次握手...
Apache ssl.conf:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
SSLVerifyClient optional
SSLUserName SSL_CLIENT_S_DN_CN
SSLCARevocationFile /etc/httpd/ssl/xxx-revoke.pem
<Location /svn/repos>
DAV svn
SVNPath /path/svn/repos
SSLRequireSSL
SSLRequire (%{SSL_CLIENT_S_DN_O} in {"c1", "c2"}) and !(%{SSL_CLIENT_S_DN_CN} in {"old1", "old2"})
# Allow large files
LimitXMLRequestBody 0
LimitRequestBody 0
</Location>
我正在使用 TortoiseSVN GUI/cli 客户端。我假设服务器端的配置有误,您同意吗?有什么提示吗?
答案1
好的,我已经找到了解决这些重新连接问题的方法,并且不会删除该问题以防其他人搜索它。
httpd配置文件
-KeepAlive Off
+KeepAlive On
-MaxKeepAliveRequests 100
+MaxKeepAliveRequests 1000
如果 KeepAlive 关闭,Apache 会在每次请求后关闭连接,这就是我们看到如此多重新连接和证书的原因。
这些和其他一些性能技巧可以在SVN 手册