nGrinder - CPU 영향 테스트

런던행·2025년 4월 23일

스프링부트

목록 보기
5/7

로컬 환경에서 Docker를 사용하여 AWS 인스턴스 사양과 유사하게 CPU 및 메모리 리소스를 제한하며 NGrinder 성능 테스트를 진행했습니다. 실제 AWS 환경과는 차이가 있지만, 리소스 제한에 따른 성능 변화 추이를 파악하는 데 초점을 맞췄습니다. 테스트 대상 엔드포인트는 메모리 DB에서 목록을 조회하여 응답하는 간단한 로직입니다.

로컬 테스트 환경

  • 호스트: 맥프로 2024 (Apple M3)
  • 컨테이너: Docker를 활용하여 각 인스턴스 타입별 리소스 제한 적용
  • 테스트 대상: 단일 테이블 목록 조회 API (메모리 DB 기반)
  • NGrinder 설정:
  • Virtual User (vUser): 50명
  • 수행 시간: 1분

Docker 컴포즈 파일

version: '3.8'

services:
  app-micro:
    image: (임의):latest
    container_name: spring-app
    environment:
      AWS_REGION: ap-northeast-2
    ports:
      - "80:5000"
      - "5001:5001"
      - "9010:9010"
      - "19999:9999"
    restart: always
    mem_limit: 1g
    cpus: "0.5"

  # app-medium:
  #   image: (임의):latest
  #   container_name: spring-app
  #   environment:
  #     AWS_REGION: ap-northeast-2
  #   ports:
  #     - "80:5000"
  #     - "5001:5001"
  #     - "9010:9010"
  #     - "19999:9999"
  #   restart: always
  #   mem_limit: 4g
  #   cpus: "1.0"

  # app-large:
  #   image: (임의):latest
  #   container_name: spring-app
  #   environment:
  #     AWS_REGION: ap-northeast-2
  #   ports:
  #     - "80:5000"
  #     - "5001:5001"
  #     - "9010:9010"
  #     - "19999:9999"
  #   restart: always
  #   mem_limit: 8g
  #   cpus: "2.0"

TPS 결과

Micro [cpus: "0.5", mem_limit: 1G]

CPU 평균로드 : 50%
TPS : 46.9

Small [cpus: "0.75", mem_limit: 2G]

CPU 평균로드 : 70%
TPS : 129.6

Medium [cpus: "1", mem_limit: 4G]

CPU 평균로드 : 99%
TPS : 318.1


Large [cpus: "2", mem_limit: 8G]

CPU 평균로드 : 99%
TPS : 2845.5

결과 요약:

전반적으로 CPU 리소스 제한을 늘릴수록 TPS가 뚜렷하게 증가하는 경향을 보였습니다. 특히 Micro, Small, Medium 사양에서는 CPU 할당량 증가에 비례하여 TPS가 꾸준히 상승하는 것을 확인할 수 있었습니다.

다만, Large 사양에서는 다른 구성에 비해 TPS가 매우 큰 폭으로 상승하여 이 부분에 대한 추가적인 검증이 필요해 보입니다. 현재까지의 결과로는 CPU 리소스가 성능에 중요한 영향을 미치는 것을 시사하지만, 특정 사양에서는 다른 요인이 복합적으로 작용할 가능성을 염두에 두고 분석을 진행할 예정입니다.

profile
unit test, tdd, bdd, laravel, django, android native, vuejs, react, embedded linux, typescript

0개의 댓글