1. Artillery란?
(Aritllery 로 부하테스트를 진행한 이유 + 웹에서 리포트 및 그래프 확인 가능)
2. Artillery 설치 및 yml 작성
sudo apt update
sudo apt install nodejs npm -y
sudo npm install -g artillery
설치가 완료되면, 다음 명령어를 통해 설치를 확인할 수 있다.
npx artiller --version
artillery를 사용하기 위한 load-test.yml파일 작성한다. 테스트 환경에 따라 arrivalRate를 변경해가며 사용한다.
config:
target: "[부하를 보낼 ALB/인스턴스 주소]:[포트번호]"
phases:
- duration: 60 # 테스트 시간: 60초
arrivalRate: 20 # 초당 20명의 유저가 요청을 보냄
defaults:
headers:
Content-Type: "application/json"
scenarios:
- name: Load Test
flow:
- get:
url: "[/경로]" #부하테스트를 진행할 경로.
artillery 실행
artillery run load-test.yml
mac 로컬환경에서 테스트를 했으나, 병목 현상 발생.
테스트 요약 및 분석
- 초당 500회의 요청을 할때부터, 응답 실패 요청들이 발생한다.
- EC2 인스턴스 내부에서 stress test를 진행했을때에 비해 굉장히 낮은 트래픽에서 응답실패 발생.
- 응답 실패 요청들이 발생하긴하지만, 서버가 다운된것은 아님
⇒ 병목 발생
EADDRNOTAVAIL 오류 발생 - 로컬 포트 부족
- EADDRNOTAVAIL는 Error: Address not available의 줄임말로,
- 로컬(테스트 머신)에서 사용할 수 있는 동적 포트가 고갈된 것을 의미한다.
- Artillery는 요청마다 새로운 TCP 연결을 만드는데, 동시에 너무 많은 요청을 보내면 로컬 머신의 ephemeral 포트(임시 포트) 개수가 부족해짐
- 대부분 OS는 수천~몇만 개의 ephemeral 포트를 제공하지만, 초당 수백 건 이상 요청하면 금방 고갈됨
⇒ 해결방법 : 로컬환경에서 부하를 주는 것이 아니라, EC2 머신을 사용해서 부하 발생 시나리오로 변경
'AWS' 카테고리의 다른 글
[AWS][트러블슈팅] TargetGroup Unhealthy, 504 Bad Gateway 문제 해결 (2) | 2025.06.28 |
---|---|
[AWS][트러블슈팅] ALB의 Internet-facing vs Internal (0) | 2025.06.26 |
[AWS][트러블슈팅] EC2 CPU100% 문제 해결 (1) | 2025.06.04 |
[AWS]기존 EC2로 AMI 이미지 만들고, AutoScaling 그룹에 ELB 연결하기 (0) | 2025.05.21 |
[AWS] 로드밸런서 유형과 구성요소 (0) | 2025.05.19 |