Сервер SVN в нашей компании, который настраивается самостоятельно и размещается на EC2, довольно медленный. Настройка основана на Apache и mod_dav_svn. Также запущен svnserve, который, похоже, используется системой CI. Мы можем получить доступ к репозиториям, используя SSL с сертификатами сервера и клиента, и я заметил странную вещь во время мониторинга коммита с помощью Wireshark.
Я бы ожидал, что для установления соединения будет использоваться SSL-рукопожатие, и что это соединение будет повторно использоваться в течение сеанса. Однако, похоже, каждые 200 мс/10 кб появляется новое TCP-соединение с новым SSL-рукопожатием (которое из-за сертификатов создает более высокую полезную нагрузку, чем сам трафик SVN).
Разговоры во время фиксации SVN. Обратите внимание, что для каждого соединения передается максимум 10 кб данных.
Начало фиксации в виде пакетов. Насколько я могу судить, сервер отправляет зашифрованное оповещение о закрытии 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-руководство