SVN через SSL: многие повторно подключаются при коммите
Сервер 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
