O servidor SVN da nossa empresa, que é autoconfigurado e hospedado no EC2, é bastante lento. A configuração é baseada em Apache e mod_dav_svn. Há também um svnserve em execução que parece ser usado pelo sistema de CI. Podemos acessar os repositórios usando SSL com certificados de servidor e cliente e notei uma coisa estranha ao monitorar um commit com o Wireshark.
Eu esperava que houvesse um handshake SSL para estabelecer a conexão e que essa conexão fosse reutilizada durante a sessão. No entanto, parece que a cada 200ms/10kb há uma nova conexão TCP com novo handshake SSL (que, devido aos certificados, gera uma carga útil maior do que o próprio tráfego SVN).
Conversas durante um commit SVN. Observe que para cada conexão são transferidos no máximo 10kb de dados.
Início do commit como pacotes. Pelo que sei, o servidor envia um alerta criptografado para fechar a conexão SSL. Então você vê o próximo aperto de mão...
Apachessl.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>
Estou usando clientes GUI/cli do TortoiseSVN. Minha suposição é que há uma configuração errada no lado do servidor, você concorda? Alguma dica?
Responder1
Ok, já encontrei a solução para essas reconexões e não exclua a pergunta caso outra pessoa a procure.
httpd.conf
-KeepAlive Off
+KeepAlive On
-MaxKeepAliveRequests 100
+MaxKeepAliveRequests 1000
Se KeepAlive estiver desativado, o Apache fecha a conexão após cada solicitação, e é por isso que vimos tantas reconexões e certificados.
Estas e algumas outras dicas de desempenho podem ser encontradas noManual SVN