본문으로 바로가기
 

Artillery를 이용한 스트레스 테스트 :: Outsider's Dev Story

API 서버나 웹 애플리케이션 서버를 만들면 성능테스트가 필요해진다. 다 만들고 나면 병목 지점을 찾아야 할 필요도 있고 서버가 얼마나 트래픽을 받을 수 있는지 알아야 사용자 증가에 따라 언

blog.outsider.ne.kr

 

Node 환경에서 Artillery 를 활용한 스트레스 테스트

Node 환경에서 아주 가볍게 스트레스 테스트를 구성하고 싶었고 그 요구 사항에 맞는 툴을 리서치하다 third party 로 제공하는 Artillery 를 알게되었다. 본 문서에서는 Artillery 을 통해 스트레스 테스

velog.io

 

디도스 공격에 얼마나 잘 대응하고 서버가 버티는 지 확인하기 위해 스트레스 테스트를 하는 방법을 알아내야만 했다.  Artillery를 이용해보자. node로 만들어져서 노드로 스트레스 테스트를 진행할 수 있다.

 

ab같은 간단한 스트레스 테스트 도구도 있고 nGrinder(혹은 Grinder)나 Gatling, Tsung, JMeter처럼 더 정교한 테스트를 할 수 있는 도구도 있다. (출처 - https://blog.outsider.ne.kr/1238) 제대로 스트레스 테스팅을 해본다면 nGrinder를 배우는 게 좋다ㅗ

 

글로벌하게 설치하자.

npm install -g artillery

 

명령창에 다음과 같이 적어주자.

artillery quick --duration 60 --rate 20 -n 20 [주소]
artillery quick --duration 60 --rate 20 -n 20 http://ec2-3-34-134-xxx.ap-northeast-2.compute.amazonaws.com/

60초, 1초에 20개를 20명이 날린다는 가정이다. 즉, 초당 400개를 1분 동안 날린다는 것이다.

 

그렇다면 결국 24000의 명령을 처리하게 되는 것이다. Requests completed를 살펴보면 알겠지만 24000개의 명령을 처리했다고 나와있다.

 

 

결과로 보면 200 코드가 659개, 503(보통 서버 과부하) 23341을 받았다. 디도스 공격에 아주 취약하다는 의미이다.

요청 시간은 최저 248ms, 최장 1873ms 가 걸리는 것을 볼 수 있다.

p95 p99는 퍼센타일(Percentile)값으로 느린 요청 중 95%에 있는 요청이 527ms가 걸렸고 99%에 있는 요청이 568ms초가 걸린 것을 확인할 수 있다.

All virtual users finished
Summary report @ 17:00:19(+0900) 2020-07-30
  Scenarios launched:  1200
  Scenarios completed: 1200
  Requests completed:  24000
  Mean response/sec: 358.05
  Response time (msec):
    min: 248.3
    max: 1873
    median: 265.3
    p95: 527.8
    p99: 568.2
  Scenario counts:
    0: 1200 (100%)
  Codes:
    200: 659
    503: 23341

 

node를 이용해 quick 명령보다 조금 더 자세한 테스팅을 진행할 수도 있다.

 

 

 

테스트를 실행한 후 리눅스 서버에서 cpu 사용량을 보려면 다음을 입력하자.

mpstat -P ALL 1

 

 

실행한 결과가 쭈욱 나온다. 명령을 날려봤는데 결과가 다음과 같았다.

(코어가 1개 뿐이다)

 

날리기 전
날리고난 후

 

 

 

AWS 자체 모니터링에서 확인할 결과에서도 cpu 사용량이 급격히 늘어난 것을 (그래봐야 10%대지만) 확인할 수 있다.

 

 

참고한 글)

https://blog.outsider.ne.kr/1238

https://blueyikim.tistory.com/555

 

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체