Embedded undertow VS. Tomcat
반응형

Spring Boot 를 이용하게 되면 보통 Tomcat을 기본적으로 사용하게 된다. 

(아래 게시물을 보면 Spring Boot Starter 2.4.9 의 경우 기본 내장 Tomcat은 9.0.50 임)

 

jar로 된 Spring boot 프로젝트를 war 로 배포(1) - tomcat 구성

spring boot 로 개발한 Standalone 을 외장 Tomcat에 War로 구성하여 성능을 비교하기 위해 먼저 tomcat을 구성하고 war 배포를 진행한다. 가장 먼저 해야 할 일은 성능 비교할 Tomcat 버전 확인 현재 Tomcat 버..

enowy.tistory.com

 

최근에는 undertow로 변경하여 이용하는 경우가 많은데 Standalone 으로 설치된 Tomcat과 성능 비교를 해 보았다.

 

테스트 대상 환경은 아래와 같다.

  • 환경 (CPU 2 Core, Memory 4GB)
    • test01 - API 서버, telegraf (docker)
    • test02 - API 호출 클라이언트 (locust), telegraf (docker) 
    • test03 - API 호출 클라이언트 (locust), telegraf (docker)
    • test04 - API 호출 클라이언트 (locust), telegraf (docker)
    • test05 - API 호출 클라이언트 (locust), telegraf (docker)
    • test06 - API 호출 클라이언트 (locust), telegraf (docker)
    • test07 - kafka, telegraf, influxdb v2, grafana 
  • 테스트 대상
    • Spring Boot 로 개발한 API - Embedded undertow With jar
    • Spring Boot 로 개발한 API - Standalone Tomcat With war
  •  Client
    • 600명의 사용자가 30분동안 API를 호출하여 json 데이터 전송 (locust 기반)

성능 모니터링 설치는 아래를 참고할 것.

시스템 모니터링을 위한 Grafana, influxdb 2, telegraf 설치(1)

호출 흐름은 아래와 같다.

Call Flow

이렇게 구성하여 호출한 결과는 아래와 같다.

Undertow 호출
(건)
평균
호출
시간(초)
최소
호출
시간(초)
최대
호출
시간 (초)
초당
요청
횟수(건)
평균
CPU
사용량(%)
평균
Memory
사용량(%)
870,294 0.209 0.002 2.753 483.46 77.90 21.88
857,429 0.226 0.002 2.876 476.39
857,966 0.225 0.002 2.875 476.71
855,379 0.229 0.002 3.060 475.28
855,465 0.070 0.004 7.506 556.24
결과 (합계)4,296,533 (avg.)0.192 (min)0.002 (max)7.506 (합계)2,468.08
Tomcat      821,577  0.278 0.002 1.315 456.42 80.59 23.70
     833,894  0.260 0.002 1.185 463.26
     820,736  0.278 0.002 1.283 456.01
     805,051  0.303 0.002 1.331 447.32
     830,628  0.090 0.005 7.314 544.87
결과 (합계)4,111,886 (avg.)0.242 (min)0.002 (max)7.314 (합계)2,367.88
비교  (U/T) 104% - - - (U/T) 104% (U/T) 97% (U/T) 92%

비교 결과 Enbedded Undertow 쪽이 더 우세한 것으로 나타났다. 호출은 Tomcat에 비해 undertow쪽이 104% 로 더 많이 처리되었고 CPU 사용량도 77.90% 로 더 적게 사용하고 있다.

 

  • Embedded 라서 성능이 낮을줄 알았는데 오히려 더 좋은 성능을 보여 주었다.
  • Tomcat을 6.X 로 이용해 사내 시스템을 운영한 적이 있었는데 성능 문제로 결국 상용 WAS로 전환했던 적이 있다.
반응형