많은 사람들이 Tomcat 클러스터의 기능적인 부분에 관심을 갖고 있지만 (정말 Tomcat 의 클러스터 기능에 대한 신뢰를 할 수 있느냐?), 정작 그 성능에 대해서는 큰 관심을 갖고 있지 않은 듯 하다.

그래서 빅토르 최는 Tomcat 클러스터로 인한 성능 차이, 즉 성능 저하에 대한 부분을 조명해 보고자 한다.

 

실험환경

  • JDK 1.7 64bit
  • Apache 2.2.29
  • Tomcat 8.0.12
  • jPetstore 애플리케이션

 

실험조건

  • Tomcat 3중화 (3개 인스턴스)
  • 인스턴스 당 -Xms512m -Xmx512m -MaxPermSize:128m
  • ParallelGC
  • 요청 유형은 조회 + 로그인 + 장바구니 담기 등이 혼합된 총 X건으로, Apache HTTP Server 를 통해 요청함

 

실험결과

요청건수 클러스터 여부 수행시간(초) 초당수행건수 평균GC횟수
5000건 X 174 28.736 10.000
5000건 O 205 24.390 13.000
9800건 X 312 31.410 18.667
9800건 O 349 28.080 23.333
19400건 X 605 31.856 36.000
19400건 O 675 28.741 45.000
38600건 X 1604 24.065 78.333
38600건 O 1768 21.833 97.333

 

  • 초당 수행 건수로 보면, 클러스터 구성을 하였을 때 ,하지 않았을 때보다 약 10% 정도 성능 하락이 있는 것으로 확인됨
  • 인스턴스 당 평균 GC 횟수로 보면, 클러스터 구성을 하였을 때, 하지 않았을 때보다 약 25% 정도 빈번하게 발생하는 것으로 확인됨
  • 클러스터와는 상관 없지만 19400건 -> 38600건으로 올렸을 때 초당수행건수가 줄어드는 것으로 보아 그 사이 지점 중 이 시스템의 한계점이 있는 것으로 확인됨

 

그래프를 통해 확인해 보시겠습니다. 먼저 초당처리건수입니다.

 

GC 횟수입니다. 여기에서 GC 횟수는 3중화 된 인스턴스의 평균입니다.

 

1차 간이 테스트 결과 일단 성능 저하는 분명히 있는 것으로 확인되었다. (물론 당연한 것이겠지만, 수치적으로 입증)

다음에 또 기회가 닿으면 3중화가 아닌 2중화, 4중화 등 더욱 다양한 케이스에서 확인해 보도록 하겠다.