セルフセットアップでEC2でホストされている当社のSVNサーバーはかなり遅いです。セットアップはApacheとmod_dav_svnに基づいています。 CIシステムで使用されているように見えるsvnserveも実行されています。サーバー証明書とクライアント証明書を使用して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クライアントを使用しています。サーバー側の構成が間違っていると思いますが、同意しますか?ヒントはありますか?
さて、私はそれらの再接続の解決策をすでに見つけました。他の誰かがそれを検索した場合に備えて、質問を削除しないでください。
httpd.conf
-KeepAlive Off
+KeepAlive On
-MaxKeepAliveRequests 100
+MaxKeepAliveRequests 1000
キープアライブがオフの場合、Apacheは各リクエストの後に接続を閉じます。そのため、再接続と証明書が非常に多く見られました。
これらおよびその他のパフォーマンスのヒントは、 SVNマニュアル にあります。