弊社の SVN サーバーは、独自にセットアップして EC2 でホストしていますが、かなり遅いです。セットアップは Apache と mod_dav_svn に基づいています。CI システムで使用されていると思われる svnserve も実行されています。サーバー証明書とクライアント証明書を使用して SSL を使用してリポジトリにアクセスできますが、Wireshark でコミットを監視しているときに奇妙なことに気付きました。
接続を確立するために SSL ハンドシェイクがあり、その接続がセッション全体で再利用されると予想していました。しかし、200 ミリ秒/10 KB ごとに新しい 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
わかりました。再接続の解決策はすでに見つけたので、他の誰かが検索した場合に備えて質問を削除しません。
confファイル
-KeepAlive Off
+KeepAlive On
-MaxKeepAliveRequests 100
+MaxKeepAliveRequests 1000
KeepAlive がオフの場合、Apache は各リクエスト後に接続を閉じるため、再接続と証明書が多数発生しました。
これらとその他のパフォーマンスのヒントは、SVN マニュアル