我們公司的SVN伺服器是自行設定並託管在EC2上的,速度相當緩慢。該設定基於 Apache 和 mod_dav_svn。還有一個svnserve正在運行,似乎是CI系統使用的。我們可以使用具有伺服器和用戶端憑證的 SSL 來存取儲存庫,我在使用 Wireshark 監視提交時注意到了一件奇怪的事情。
我預計會透過 SSL 握手來建立連接,並且該連接會在會話中重複使用。然而,似乎每 200ms/10kb 就會有一個具有新 SSL 握手的新 TCP 連線(由於憑證會產生比 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.conf
-KeepAlive Off
+KeepAlive On
-MaxKeepAliveRequests 100
+MaxKeepAliveRequests 1000
如果 KeepAlive 關閉,Apache 會在每次請求後關閉連接,這就是我們看到如此多的重新連接和憑證的原因。
這些和其他一些性能技巧可以在SVN手冊