자체 설정되고 EC2에서 호스팅되는 우리 회사의 SVN 서버는 꽤 느립니다. 설정은 Apache 및 mod_dav_svn을 기반으로 합니다. CI 시스템에서 사용되는 것으로 보이는 svnserve도 실행 중입니다. 서버 및 클라이언트 인증서와 함께 SSL을 사용하여 리포지토리에 액세스할 수 있는데 Wireshark로 커밋을 모니터링하는 동안 이상한 점을 발견했습니다.
연결을 설정하기 위한 SSL 핸드셰이크가 있고 해당 연결이 세션 동안 재사용될 것으로 예상했습니다. 그러나 200ms/10kb마다 새로운 SSL 핸드셰이크를 사용하는 새로운 TCP 연결이 있는 것 같습니다(인증서로 인해 SVN 트래픽 자체보다 더 높은 페이로드가 발생함).
SVN 커밋 중 대화. 각 연결마다 최대 10kb의 데이터가 전송된다는 점에 유의하세요.
커밋을 패킷으로 시작합니다. 내가 알 수 있는 한 서버는 SSL 연결을 종료하기 위해 암호화된 경고를 보냅니다. 그럼 다음 악수를 보시죠...
아파치 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 매뉴얼