반응형
Spring Boot 를 이용하게 되면 보통 Tomcat을 기본적으로 사용하게 된다.
(아래 게시물을 보면 Spring Boot Starter 2.4.9 의 경우 기본 내장 Tomcat은 9.0.50 임)
최근에는 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)
호출 흐름은 아래와 같다.
이렇게 구성하여 호출한 결과는 아래와 같다.
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로 전환했던 적이 있다.
반응형
Comment