Artillery를 통한 서버 스트레스 테스트, mpstat CPU 사용량 체크
디도스 공격에 얼마나 잘 대응하고 서버가 버티는 지 확인하기 위해 스트레스 테스트를 하는 방법을 알아내야만 했다. 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