우선 연습하다 발생한 log들을 저장하기 위해 morgan 모듈을 설치하여
app,js에 이와같이 선언해주었습니다.
const logger = require('morgan')
app.use(logger('dev'));
artillery 모듈은 가상으로 사용자 수를 지정하여 서버에 과부하가 걸리는지 테스트합니다.
artillery 모듈을 설치하고 cpu-test.yaml 파일을 생성하여 이와 같이 작성했습니다.
config:
target: "http://localhost:8080" # host
phases:
- duration: 30 # 해당 초만큼 실행
arrivalRate: 3000 # 가상 사용자 수
scenarios:
- flow:
- get:
url: "/user" # setParam에서 넣은 ID
capture:
json:
as:
app.js에
app.get('/user', (req, res) => {
res.send('테스트');
});
이와 같은 api를 작성하였는데 해당 프로젝트가 아닌 다른 프로젝트에도 적용하여 테스트가 가능합니다.
모듈을 글로벌이 아닌 로컬에 설치하였기 때문에, json에 따로 명령어를 만들어주었습니다.
{
"name": "protection",
"version": "0.0.1",
"description": "트래픽 테스트",
"main": "app.js",
"dependencies": {
"artillery": "^1.7.6",
"compression": "^1.7.4",
"cors": "^2.8.5",
"express": "^4.17.1",
"express-rate-limit": "^5.3.0",
"helmet": "^4.6.0",
"morgan": "^1.10.0",
"nodemon": "^2.0.9",
"pm2": "^5.1.0"
},
"scripts": {
"start": "nodemon app.js",
"dino": "./node_modules/.bin/artillery dino",
"artillery": "./node_modules/.bin/artillery run cpu-test.yaml",
"report": "./node_modules/.bin/artillery run -o loadbalancing-report cpu-test.yaml",
"pm2": "pm2 start app.js -i 0",
"kill": "pm2 kill"
}
}
아래의 명령어를 입력하여 서버를 테스트해보았습니다.
npm run artillery
npm run report
그러면 콘솔에 이러한 결과가 찍히게 됩니다.
Report @ 11:33:40(+0900) 2021-07-09
Elapsed time: 2 minutes, 30 seconds
Scenarios launched: 3107
Scenarios completed: 0
Requests completed: 0
Mean response/sec: 311.01
Response time (msec):
min: NaN
max: NaN
median: NaN
p95: NaN
p99: NaN
Errors:
ECONNREFUSED: 3107
Report @ 11:33:50(+0900) 2021-07-09
Elapsed time: 2 minutes, 40 seconds
Scenarios launched: 2932
Scenarios completed: 0
Requests completed: 0
Mean response/sec: 293.2
Response time (msec):
min: NaN
max: NaN
median: NaN
p95: NaN
p99: NaN
Errors:
ECONNREFUSED: 2932
여기서 보면 p95와 p99는 NaN이 아니라 결과값이 나와야하고,
Errors가 아니라 Codes : 200이 나와야 정상입니다.
의도적으로 서버에 과부하를 걸어준 것은 맞으나 고작 3000명에 터지는 서버라니..비실비실하군요...
어찌되었건 과부하 걸린 서버를 pm2를 이용하여 조금이나마 줄여보도록 하겠습니다.
pm2 모듈을 설치 후 실행시킬 건데요 명령어는 위에서 올린 package.json에 적어두었습니다.
npm run pm2 // 키기
npm run kill //끄기
pm2의 장점은 로드밸린성 최적화와 무중단으로 서버를 돌릴 수 있다는 장점이 있죠.
실행시켜보면
이제 이 상태로 다시 artillery를 실행시켜보겠습니다...
PS C:\Users\guswl\project\ddos_attack_protection> npm run artillery
> protection@0.0.1 artillery C:\Users\guswl\project\ddos_attack_protection
> artillery run cpu-test.yaml
Started phase 0, duration: 30s @ 11:39:18(+0900) 2021-07-09
Report @ 11:39:28(+0900) 2021-07-09
Elapsed time: 10 seconds
Scenarios launched: 2494
Scenarios completed: 2489
Requests completed: 2489
Mean response/sec: 249.3
Response time (msec):
min: 3
max: 48
median: 7
p95: 10
p99: 14
Codes:
200: 2489
Warning:
CPU usage of Artillery seems to be very high (pids: 2268)
which may severely affect its performance.
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:39:38(+0900) 2021-07-09
Elapsed time: 20 seconds
Scenarios launched: 2790
Scenarios completed: 2790
Requests completed: 2790
Mean response/sec: 279.56
Response time (msec):
min: 3
max: 49
median: 6
p95: 9
p99: 12
Codes:
200: 2790
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:39:48(+0900) 2021-07-09
Elapsed time: 30 seconds
Scenarios launched: 2859
Scenarios completed: 2859
Requests completed: 2859
Mean response/sec: 286.19
Response time (msec):
min: 3
max: 32
median: 6
p95: 9
p99: 11
Codes:
200: 2859
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:39:58(+0900) 2021-07-09
Elapsed time: 40 seconds
Scenarios launched: 2696
Scenarios completed: 2696
Requests completed: 2696
Mean response/sec: 269.87
Response time (msec):
min: 3
max: 61
median: 6
p95: 9
p99: 15
Codes:
200: 2696
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:40:08(+0900) 2021-07-09
Elapsed time: 50 seconds
Scenarios launched: 2666
Scenarios completed: 2665
Requests completed: 2665
Mean response/sec: 267.13
Response time (msec):
min: 3
max: 125
median: 6
p95: 9
p99: 16
Codes:
200: 2665
Report @ 11:40:18(+0900) 2021-07-09
Elapsed time: 1 minute, 0 seconds
Scenarios launched: 2562
Scenarios completed: 2562
Requests completed: 2562
Mean response/sec: 256.46
Response time (msec):
min: 3
max: 43
median: 7
p95: 11
p99: 20
Codes:
200: 2562
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:40:28(+0900) 2021-07-09
Elapsed time: 1 minute, 10 seconds
Scenarios launched: 2393
Scenarios completed: 2394
Requests completed: 2394
Mean response/sec: 240.02
Response time (msec):
min: 3
max: 52
median: 7
p95: 12
p99: 23
Codes:
200: 2394
Report @ 11:40:38(+0900) 2021-07-09
Elapsed time: 1 minute, 20 seconds
Scenarios launched: 2722
Scenarios completed: 2722
Requests completed: 2722
Mean response/sec: 272.47
Response time (msec):
min: 2
max: 23
median: 7
p95: 10
p99: 14
Codes:
200: 2722
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:40:48(+0900) 2021-07-09
Elapsed time: 1 minute, 30 seconds
Scenarios launched: 2800
Scenarios completed: 2800
Requests completed: 2800
Mean response/sec: 280.28
Response time (msec):
min: 3
max: 26
median: 6
p95: 9
p99: 12
Codes:
200: 2800
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:40:58(+0900) 2021-07-09
Elapsed time: 1 minute, 40 seconds
Scenarios launched: 2781
Scenarios completed: 2781
Requests completed: 2781
Mean response/sec: 278.38
Response time (msec):
min: 3
max: 39
median: 7
p95: 9
p99: 14
Codes:
200: 2781
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:41:08(+0900) 2021-07-09
Elapsed time: 1 minute, 50 seconds
Scenarios launched: 2821
Scenarios completed: 2820
Requests completed: 2820
Mean response/sec: 282.38
Response time (msec):
min: 3
max: 30
median: 6
p95: 9
p99: 11
Codes:
200: 2820
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:41:18(+0900) 2021-07-09
Elapsed time: 2 minutes, 0 seconds
Scenarios launched: 2724
Scenarios completed: 2724
Requests completed: 2724
Mean response/sec: 272.13
Response time (msec):
min: 3
max: 88
median: 6
p95: 9
p99: 17
Codes:
200: 2724
Report @ 11:41:28(+0900) 2021-07-09
Elapsed time: 2 minutes, 10 seconds
Scenarios launched: 2706
Scenarios completed: 2706
Requests completed: 2706
Mean response/sec: 272.23
Response time (msec):
min: 3
max: 95
median: 6
p95: 9
p99: 15
Codes:
200: 2706
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:41:38(+0900) 2021-07-09
Elapsed time: 2 minutes, 20 seconds
Scenarios launched: 2877
Scenarios completed: 2878
Requests completed: 2878
Mean response/sec: 287.99
Response time (msec):
min: 3
max: 24
median: 6
p95: 9
p99: 11
Codes:
200: 2878
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:41:48(+0900) 2021-07-09
Elapsed time: 2 minutes, 30 seconds
Scenarios launched: 2900
Scenarios completed: 2900
Requests completed: 2900
Mean response/sec: 290.29
Response time (msec):
min: 2
max: 29
median: 6
p95: 8
p99: 13
Codes:
200: 2900
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:41:58(+0900) 2021-07-09
Elapsed time: 2 minutes, 40 seconds
Scenarios launched: 2758
Scenarios completed: 2757
Requests completed: 2757
Mean response/sec: 276.08
Response time (msec):
min: 3
max: 38
median: 6
p95: 9
p99: 12
Codes:
200: 2757
Report @ 11:42:08(+0900) 2021-07-09
Elapsed time: 2 minutes, 50 seconds
Scenarios launched: 2370
Scenarios completed: 2370
Requests completed: 2370
Mean response/sec: 237.47
Response time (msec):
min: 3
max: 46
median: 7
p95: 13
p99: 24.8
Codes:
200: 2370
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:42:18(+0900) 2021-07-09
Elapsed time: 3 minutes, 0 seconds
Scenarios launched: 2585
Scenarios completed: 2585
Requests completed: 2585
Mean response/sec: 258.76
Response time (msec):
min: 3
max: 40
median: 7
p95: 10
p99: 15
Codes:
200: 2585
Report @ 11:42:28(+0900) 2021-07-09
Elapsed time: 3 minutes, 10 seconds
Scenarios launched: 2649
Scenarios completed: 2649
Requests completed: 2649
Mean response/sec: 265.43
Response time (msec):
min: 3
max: 29
median: 7
p95: 10
p99: 15
Codes:
200: 2649
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:42:38(+0900) 2021-07-09
Elapsed time: 3 minutes, 20 seconds
Scenarios launched: 2715
Scenarios completed: 2716
Requests completed: 2716
Mean response/sec: 272.04
Response time (msec):
min: 3
max: 41
median: 7
p95: 9
p99: 12
Codes:
200: 2716
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:42:48(+0900) 2021-07-09
Elapsed time: 3 minutes, 30 seconds
Scenarios launched: 2795
Scenarios completed: 2794
Requests completed: 2794
Mean response/sec: 279.78
Response time (msec):
min: 2
max: 38
median: 6
p95: 9
p99: 11
Codes:
200: 2794
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:42:58(+0900) 2021-07-09
Elapsed time: 3 minutes, 40 seconds
Scenarios launched: 2752
Scenarios completed: 2753
Requests completed: 2753
Mean response/sec: 275.48
Response time (msec):
min: 3
max: 26
median: 7
p95: 9
p99: 12
Codes:
200: 2753
Report @ 11:43:08(+0900) 2021-07-09
Elapsed time: 3 minutes, 50 seconds
Scenarios launched: 2719
Scenarios completed: 2719
Requests completed: 2719
Mean response/sec: 272.17
Response time (msec):
min: 3
max: 35
median: 7
p95: 9
p99: 14
Codes:
200: 2719
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:43:18(+0900) 2021-07-09
Elapsed time: 4 minutes, 0 seconds
Scenarios launched: 2736
Scenarios completed: 2736
Requests completed: 2736
Mean response/sec: 273.87
Response time (msec):
min: 3
max: 36
median: 7
p95: 9
p99: 13
Codes:
200: 2736
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:43:28(+0900) 2021-07-09
Elapsed time: 4 minutes, 10 seconds
Scenarios launched: 2767
Scenarios completed: 2767
Requests completed: 2767
Mean response/sec: 276.98
Response time (msec):
min: 3
max: 29
median: 7
p95: 9
p99: 12
Codes:
200: 2767
Report @ 11:43:38(+0900) 2021-07-09
Elapsed time: 4 minutes, 20 seconds
Scenarios launched: 2627
Scenarios completed: 2626
Requests completed: 2626
Mean response/sec: 263.23
Response time (msec):
min: 3
max: 34
median: 7
p95: 10
p99: 14
Codes:
200: 2626
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:43:48(+0900) 2021-07-09
Elapsed time: 4 minutes, 30 seconds
Scenarios launched: 2778
Scenarios completed: 2779
Requests completed: 2779
Mean response/sec: 278.08
Response time (msec):
min: 3
max: 36
median: 6
p95: 9
p99: 12.7
Codes:
200: 2779
Report @ 11:43:58(+0900) 2021-07-09
Elapsed time: 4 minutes, 40 seconds
Scenarios launched: 2867
Scenarios completed: 2867
Requests completed: 2867
Mean response/sec: 286.99
Response time (msec):
min: 3
max: 29
median: 6
p95: 8
p99: 11
Codes:
200: 2867
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:44:08(+0900) 2021-07-09
Elapsed time: 4 minutes, 50 seconds
Scenarios launched: 2797
Scenarios completed: 2797
Requests completed: 2797
Mean response/sec: 279.98
Response time (msec):
min: 3
max: 24
median: 6
p95: 9
p99: 13
Codes:
200: 2797
Report @ 11:44:18(+0900) 2021-07-09
Elapsed time: 5 minutes, 0 seconds
Scenarios launched: 2867
Scenarios completed: 2866
Requests completed: 2866
Mean response/sec: 286.99
Response time (msec):
min: 3
max: 36
median: 6
p95: 9
p99: 12.8
Codes:
200: 2866
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:44:28(+0900) 2021-07-09
Elapsed time: 5 minutes, 10 seconds
Scenarios launched: 2878
Scenarios completed: 2878
Requests completed: 2878
Mean response/sec: 288.09
Response time (msec):
min: 3
max: 25
median: 6
p95: 8
p99: 11
Codes:
200: 2878
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:44:38(+0900) 2021-07-09
Elapsed time: 5 minutes, 20 seconds
Scenarios launched: 2871
Scenarios completed: 2872
Requests completed: 2872
Mean response/sec: 287.39
Response time (msec):
min: 3
max: 25
median: 6
p95: 9
p99: 11
Codes:
200: 2872
Warning: High CPU usage warning (pids: 2268).
See https://artillery.io/docs/faq/#high-cpu-warnings for details.
Report @ 11:44:48(+0900) 2021-07-09
Elapsed time: 5 minutes, 30 seconds
Scenarios launched: 2750
Scenarios completed: 2750
Requests completed: 2750
Mean response/sec: 275.28
Response time (msec):
min: 3
max: 41
median: 7
p95: 9
p99: 13
Codes:
200: 2750
Report @ 11:44:48(+0900) 2021-07-09
Elapsed time: 5 minutes, 30 seconds
Scenarios launched: 18
Scenarios completed: 23
Requests completed: 23
Mean response/sec: 32.76
Response time (msec):
min: 0
max: 25
median: 7
p95: 24.3
p99: 25
Codes:
200: 23
All virtual users finished
Summary report @ 11:44:49(+0900) 2021-07-09
Scenarios launched: 90090
Scenarios completed: 90090
Requests completed: 90090
Mean response/sec: 272.22
Response time (msec):
min: 0
max: 125
median: 6
p95: 9
p99: 14
Scenario counts:
0: 90090 (100%)
Codes:
200: 90090
멋지게 로드밸런싱이 됐군요.
아까 설치해두었던 morgan이 콘솔에 멋지게 로그를 남겨줬네요~!이로써 로드밸런싱 작업을 마쳤습니다! 끝~~~~
'Node.js' 카테고리의 다른 글
[Node.js] iamport 결제 실패 시의 상황 대처법 (0) | 2023.08.10 |
---|---|
[Node.js] prototype 사용예시 (0) | 2023.04.26 |
[Node.js] prototype 이란 (0) | 2023.04.26 |
[Node.js] RabbitMQ (0) | 2021.07.25 |