Сервер 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. Я предполагаю, что на стороне сервера неправильная конфигурация, вы согласны? Есть подсказки?
Хорошо, я уже нашел решение для этих повторных подключений и не удаляю вопрос, если кто-то другой его найдет.
httpd.conf
-KeepAlive Off
+KeepAlive On
-MaxKeepAliveRequests 100
+MaxKeepAliveRequests 1000
Если KeepAlive выключен, Apache закрывает соединение после каждого запроса, поэтому мы видели так много повторных подключений и сертификатов.
Эти и некоторые другие советы по производительности можно найти в Руководство по SVN