Information Security Study
트래픽 폭주 제어하기 본문
트래픽 폭주 제어하기
스트레스 테스트를 하기 위한 시나리오를 작성했다.
시나리오에 따라 예상 트래픽을 스트레스 테스트로 발생시키시고 그에 맞춰서 확충해야 하는 서버 대수를 추론할 것이다.
스트레스 테스트에는 서버 두 대를 사용할 것이다.
Artillery 스크립트
config:
target: "http://ingress-nginx의 ip" # 타겟 서버 URL 설정
phases:
- duration: 30
arrivalRate: 100
name: "warm up"
- duration: 30
arrivalRate: 500
name: "initial peak"
- duration: 60
arrivalRate: 1000
name: "high load"
- duration: 60
arrivalRate: 500
name: "sustained load"
- duration: 30
arrivalRate: 100
name: "cool down"
scenarios:
- flow:
- get:
url: "/products" # 타겟 URL 경로 설정
대규모 할인 행사(블랙 프라이데이) 시나리오에 맞춘 스트레스 테스트 코드다.
Artillery 스트레스 테스트 도구로 트래픽을 시뮬레이션하고 서버의 처리 능력을 검증해볼 것이다.
config 섹션
- target: 테스트할 서버의 URL을 설정한다.
- phases: 테스트가 진행되는 단계를 작성한다. 각 단계마다 지속 시간(duration)과 초당 요청 수(arrivalRate)를 설정한다.
- warm up: 초기 30초 동안 초당 100개의 요청을 보낸다.
- initial peak: 첫 번째 피크 시점에서 30초 동안 초당 500개의 요청을 보낸다.
- high load: 60초 동안 초당 1000개의 요청을 보내서 서버의 과부하 상태를 시뮬레이션한다.
- sustained load: 60초 동안 초당 500개의 요청을 유지하여 지속적인 고부하 상태를 테스트한다.
- cool down: 마지막 30초 동안 초당 100개의 요청으로 부하를 줄인다.
scenarios 섹션
특정 시나리오에 대한 HTTP 요청을 정의한다. /products 경로로 GET 요청을 보내서 테스트했다.
artillery run script.yaml
스크립트 실행 명령어
artillery.cmd report .\report.json
스트레스 테스트 결과 저장 명령어
warm up 단계 결과
Phase started: warm up (index: 0, duration: 30s) 14:36:37(+0900)
--------------------------------------
Metrics for period to: 14:36:40(+0900) (width: 2.529s)
--------------------------------------
http.codes.200: ................................................................ 235
http.downloaded_bytes: ......................................................... 10810
http.request_rate: ............................................................. 105/sec
http.requests: ................................................................. 238
http.response_time:
min: ......................................................................... 6
max: ......................................................................... 49
mean: ........................................................................ 8.8
median: ...................................................................... 7.9
p95: ......................................................................... 10.9
p99: ......................................................................... 12.1
http.responses: ................................................................ 235
vusers.completed: .............................................................. 235
vusers.created: ................................................................ 238
vusers.created_by_name.0: ...................................................... 238
vusers.failed: ................................................................. 0
vusers.session_length:
min: ......................................................................... 11.9
max: ......................................................................... 63
mean: ........................................................................ 16.9
median: ...................................................................... 15
p95: ......................................................................... 34.8
p99: ......................................................................... 53
--------------------------------------
Metrics for period to: 14:36:50(+0900) (width: 9.997s)
--------------------------------------
http.codes.200: ................................................................ 1000
http.downloaded_bytes: ......................................................... 46000
http.request_rate: ............................................................. 100/sec
http.requests: ................................................................. 1000
http.response_time:
min: ......................................................................... 6
max: ......................................................................... 63
mean: ........................................................................ 8.2
median: ...................................................................... 7.9
p95: ......................................................................... 10.1
p99: ......................................................................... 13.1
http.responses: ................................................................ 1000
vusers.completed: .............................................................. 1000
vusers.created: ................................................................ 1000
vusers.created_by_name.0: ...................................................... 1000
vusers.failed: ................................................................. 0
vusers.session_length:
min: ......................................................................... 10.8
max: ......................................................................... 73.2
mean: ........................................................................ 14.4
median: ...................................................................... 13.9
p95: ......................................................................... 17.6
p99: ......................................................................... 24.8
--------------------------------------
Metrics for period to: 14:37:00(+0900) (width: 9.999s)
--------------------------------------
http.codes.200: ................................................................ 1000
http.downloaded_bytes: ......................................................... 46000
http.request_rate: ............................................................. 100/sec
http.requests: ................................................................. 1000
http.response_time:
min: ......................................................................... 5
max: ......................................................................... 38
mean: ........................................................................ 9.3
median: ...................................................................... 7.9
p95: ......................................................................... 19.1
p99: ......................................................................... 26.8
http.responses: ................................................................ 1000
vusers.completed: .............................................................. 1000
vusers.created: ................................................................ 1000
vusers.created_by_name.0: ...................................................... 1000
vusers.failed: ................................................................. 0
vusers.session_length:
min: ......................................................................... 10.4
max: ......................................................................... 58.8
mean: ........................................................................ 16.9
median: ...................................................................... 14.4
p95: ......................................................................... 36.2
p99: ......................................................................... 46.1
Phase completed: warm up (index: 0, duration: 30s) 14:37:07(+0900)
Warm-up 단계의 목적
- 서버가 점진적으로 부하에 적응할 수 있도록 하는 것이며 이를 통해 서버의 기본 성능과 초기 상태를 파악한다.
주요 메트릭 분석
1) HTTP 요청 수와 응답 수
- http.requests: 238, 1000, 1000 (세 기간 동안 각각 238, 1000, 1000 요청)
- http.responses: 235, 1000, 1000 (세 기간 동안 각각 235, 1000, 1000 응답)
대부분의 요청에 대한 응답이 성공적으로 처리되었다. 첫 번째 기간(2.5초)에서는 238개의 요청이 있었고 235개의 응답이 성공했으며 나머지 두 기간에서는 1000개의 요청 모두가 성공적으로 처리되었다.
2) HTTP 응답 코드
- http.codes.200: 235, 1000, 1000
모든 응답이 HTTP 200 상태 코드로 반환되었다. 이는 서버가 모든 요청에 대해 성공적으로 응답했음을 의미한다.
3) HTTP 응답 시간
- min: 5-6ms
- max: 38-63ms
- mean: 8.2-9.3ms
- p95: 10.1-19.1ms
- p99: 12.1-26.8ms
응답 시간은 대부분 빠르며 평균 응답 시간은 8.2ms에서 9.3ms 사이로 양호하다.
응답 시간의 95백분위수와 99백분위수는 각각 10.1ms에서 19.1ms, 12.1ms에서 26.8ms로 극단적으로 긴 응답 시간은 발생하지 않았다.
4) 가상 사용자(VUsers)
- vusers.created: 238, 1000, 1000 (세 기간 동안 각각 238, 1000, 1000 생성)
- vusers.completed: 235, 1000, 1000 (세 기간 동안 각각 235, 1000, 1000 완료)
- vusers.failed: 0 (모든 가상 사용자가 성공적으로 세션을 완료)
모든 가상 사용자가 세션을 실패한 사용자 없이 성공적으로 완료했다. 서버가 부하를 잘 처리했음을 의미한다.
5) 세션 길이
- mean: 14.4ms - 16.9ms
- median: 13.9ms - 15ms
- p95: 17.6ms - 36.2ms
- p99: 24.8ms - 53ms
세션 길이도 대부분 일관되게 유지되었다. 최대값이 증가하는 경향이 있지만 전체적으로 안정적인 성능이다.
Warm-up 단계 결론
Warm-up 단계 동안 서버는 안정적인 성능을 보였다. 모든 요청이 성공적으로 처리되었고 응답 시간도 짧고 일관성이 있었다.
- 응답률: 100% 성공적인 응답률 (HTTP 200)
- 응답 시간: 응답 시간은 평균 8.2ms에서 9.3ms로 매우 짧고 안정적이다.
- 가상 사용자 성공률: 모든 가상 사용자가 성공적으로 세션을 완료했다.
서버가 초당 100건의 요청을 처리하는 데 문제가 없으며 고부하 상황에서도 잘 대응할 가능성이 있음을 시사한다.
초기 단계에서는 서버가 정상적으로 작동하고 있으므로 이후 단계에서 부하가 증가하는 상황을 더 집중적으로 분석하여 서버 성능 저하의 징후를 찾아야 한다.
initial peak 단계
Phase started: initial peak (index: 1, duration: 30s) 14:37:07(+0900)
--------------------------------------
Metrics for period to: 14:37:10(+0900) (width: 9.998s)
--------------------------------------
http.codes.200: ................................................................ 1960
http.downloaded_bytes: ......................................................... 90160
http.request_rate: ............................................................. 197/sec
http.requests: ................................................................. 1965
http.response_time:
min: ......................................................................... 5
max: ......................................................................... 35
mean: ........................................................................ 8.4
median: ...................................................................... 7.9
p95: ......................................................................... 12.1
p99: ......................................................................... 15
http.responses: ................................................................ 1960
vusers.completed: .............................................................. 1960
vusers.created: ................................................................ 1965
vusers.created_by_name.0: ...................................................... 1965
vusers.failed: ................................................................. 0
vusers.session_length:
min: ......................................................................... 10.2
max: ......................................................................... 76.2
mean: ........................................................................ 15.9
median: ...................................................................... 15.3
p95: ......................................................................... 21.1
p99: ......................................................................... 30.9
--------------------------------------
Metrics for period to: 14:37:20(+0900) (width: 9.999s)
--------------------------------------
http.codes.200: ................................................................ 4986
http.downloaded_bytes: ......................................................... 229356
http.request_rate: ............................................................. 500/sec
http.requests: ................................................................. 5000
http.response_time:
min: ......................................................................... 4
max: ......................................................................... 62
mean: ........................................................................ 14.5
median: ...................................................................... 13.1
p95: ......................................................................... 27.9
p99: ......................................................................... 36.2
http.responses: ................................................................ 4986
vusers.completed: .............................................................. 4986
vusers.created: ................................................................ 5000
vusers.created_by_name.0: ...................................................... 5000
vusers.failed: ................................................................. 0
vusers.session_length:
min: ......................................................................... 10.6
max: ......................................................................... 3243.2
mean: ........................................................................ 34
median: ...................................................................... 26.3
p95: ......................................................................... 50.9
p99: ......................................................................... 64.7
--------------------------------------
Metrics for period to: 14:37:30(+0900) (width: 9.998s)
--------------------------------------
http.codes.200: ................................................................ 4997
http.downloaded_bytes: ......................................................... 229862
http.request_rate: ............................................................. 500/sec
http.requests: ................................................................. 5000
http.response_time:
min: ......................................................................... 0
max: ......................................................................... 94
mean: ........................................................................ 16.9
median: ...................................................................... 16
p95: ......................................................................... 29.1
p99: ......................................................................... 39.3
http.responses: ................................................................ 4997
vusers.completed: .............................................................. 4997
vusers.created: ................................................................ 5000
vusers.created_by_name.0: ...................................................... 5000
vusers.failed: ................................................................. 0
vusers.session_length:
min: ......................................................................... 11.6
max: ......................................................................... 3421.3
mean: ........................................................................ 44.7
median: ...................................................................... 33.5
p95: ......................................................................... 54.1
p99: ......................................................................... 89.1
Phase completed: initial peak (index: 1, duration: 30s) 14:37:37(+0900)
Initial Peak 단계 분석
Initial Peak 단계는 서버가 중간 정도의 부하를 견딜 수 있는지 확인하는 단계다.
서버가 고부하 상황을 어떻게 처리하는지를 테스트한다.
주요 메트릭 분석
1) HTTP 요청 수와 응답 수
- 첫 번째 기간 (3초)
- http.requests: 1965
- http.responses: 1960
- 두 번째 기간 (10초)
- http.requests: 5000
- http.responses: 4986
- 세 번째 기간 (10초)
- http.requests: 5000
- http.responses: 4997
이 단계에서도 모든 요청이 성공적으로 처리되었다. 요청과 응답 모두가 증가하며 첫 번째 기간 이후 응답 수가 점진적으로 증가했고 모든 기간에서 요청과 응답 비율이 거의 일치한다.
2) HTTP 응답 코드
- 첫 번째 기간: http.codes.200: 1960
- 두 번째 기간: http.codes.200: 4986
- 세 번째 기간: http.codes.200: 4997
모든 응답이 HTTP 200 상태 코드로 반환되었다. 서버가 요청에 대해 정상적으로 응답했다.
3) HTTP 응답 시간
- 첫 번째 기간
- mean: 8.4ms
- p95: 12.1ms
- p99: 15ms
- 두 번째 기간
- mean: 14.5ms
- p95: 27.9ms
- p99: 36.2ms
- 세 번째 기간
- mean: 16.9ms
- p95: 29.1ms
- p99: 39.3ms
응답 시간이 증가하는 경향이 있다. 평균 응답 시간은 첫 번째 기간에 비해 두 번째와 세 번째 기간 동안 증가했으며 95백분위수와 99백분위수도 증가했다.
부하가 증가함에 따라 서버의 응답 시간도 역시 길어진다.
4) 가상 사용자(VUsers)
- 첫 번째 기간
- vusers.created: 1965
- vusers.completed: 1960
- vusers.failed: 0
- 두 번째 기간
- vusers.created: 5000
- vusers.completed: 4986
- vusers.failed: 0
- 세 번째 기간
- vusers.created: 5000
- vusers.completed: 4997
- vusers.failed: 0
모든 가상 사용자가 세션을 성공적으로 완료했다. 실패한 사용자가 없기 때문ㅇ 초기 피크 동안 서버는 요청을 성공적으로 처리했음을 알 수 있다.
5) 세션 길이
- 첫 번째 기간
- mean: 15.9s
- p95: 21.1s
- p99: 30.9s
- 두 번째 기간
- mean: 34s
- p95: 50.9s
- p99: 64.7s
- 세 번째 기간
- mean: 44.7s
- p95: 54.1s
- p99: 89.1s
세션 길이도 증가했으며 시간이 지남에 따라 평균 세션 길이와 극단적인 값이 늘어났다.
서버의 부하가 증가함에 따라 세션 처리 시간이 길어지고 있다.
Initial Peak 단계 결론
- 응답률: 100%의 성공적인 응답률 (HTTP 200)
- 응답 시간: 평균 응답 시간이 부하 증가에 따라 증가하며 95백분위수와 99백분위수도 증가했다. 서버가 높은 트래픽 부하에 따라 응답 시간이 길어진다.
- 세션 길이: 평균 세션 길이와 극단적인 값이 증가하고 있다. 서버의 부하가 증가할수록 세션 처리 시간이 늘어난다.
서버는 중간 정도의 부하를 처리할 수 있지만 응답 시간과 세션 길이에 비해 부하가 더 증가하면 성능 저하가 발생할 가능성이 높다.
따라서 후속 단계에서의 고부하 상황을 준비할 필요가 있으며 서버의 성능 저하가 어떤 시점에서 발생하는지를 더 잘 이해하기 위해 다음 단계를 주의 깊게 분석해야 한다.
high load 단계
Phase started: high load (index: 2, duration: 60s) 14:37:37(+0900)
--------------------------------------
Metrics for period to: 14:37:40(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 384
http.codes.200: ................................................................ 5143
http.downloaded_bytes: ......................................................... 236578
http.request_rate: ............................................................. 621/sec
http.requests: ................................................................. 6202
http.response_time:
min: ......................................................................... 1
max: ......................................................................... 1014
mean: ........................................................................ 14.8
median: ...................................................................... 10.9
p95: ......................................................................... 29.1
p99: ......................................................................... 40
http.responses: ................................................................ 5143
vusers.completed: .............................................................. 5143
vusers.created: ................................................................ 6204
vusers.created_by_name.0: ...................................................... 6204
vusers.failed: ................................................................. 384
vusers.session_length:
min: ......................................................................... 11
max: ......................................................................... 3393.4
mean: ........................................................................ 34.6
median: ...................................................................... 23.3
p95: ......................................................................... 56.3
p99: ......................................................................... 96.6
--------------------------------------
Metrics for period to: 14:37:50(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 4897
errors.ETIMEDOUT: .............................................................. 506
http.codes.200: ................................................................ 1365
http.codes.502: ................................................................ 1
http.downloaded_bytes: ......................................................... 62947
http.request_rate: ............................................................. 945/sec
http.requests: ................................................................. 9430
http.response_time:
min: ......................................................................... 6
max: ......................................................................... 6541
mean: ........................................................................ 338.3
median: ...................................................................... 73
p95: ......................................................................... 153
p99: ......................................................................... 6064.7
http.responses: ................................................................ 1366
vusers.completed: .............................................................. 1365
vusers.created: ................................................................ 9431
vusers.created_by_name.0: ...................................................... 9431
vusers.failed: ................................................................. 5403
vusers.session_length:
min: ......................................................................... 12.7
max: ......................................................................... 9284.9
mean: ........................................................................ 1493
median: ...................................................................... 1224.4
p95: ......................................................................... 3534.1
p99: ......................................................................... 6064.7
--------------------------------------
Metrics for period to: 14:38:00(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 10068
errors.ETIMEDOUT: .............................................................. 891
http.codes.200: ................................................................ 781
http.codes.502: ................................................................ 1464
http.downloaded_bytes: ......................................................... 265774
http.request_rate: ............................................................. 1059/sec
http.requests: ................................................................. 10570
http.response_time:
min: ......................................................................... 0
max: ......................................................................... 525
mean: ........................................................................ 15.3
median: ...................................................................... 8.9
p95: ......................................................................... 34.1
p99: ......................................................................... 62.2
http.responses: ................................................................ 2245
vusers.completed: .............................................................. 2246
vusers.created: ................................................................ 10570
vusers.created_by_name.0: ...................................................... 10570
vusers.failed: ................................................................. 10959
vusers.session_length:
min: ......................................................................... 10.3
max: ......................................................................... 7885.2
mean: ........................................................................ 93.3
median: ...................................................................... 18.4
p95: ......................................................................... 71.5
p99: ......................................................................... 1249.1
--------------------------------------
Metrics for period to: 14:38:10(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 7341
errors.ETIMEDOUT: .............................................................. 484
http.codes.200: ................................................................ 2175
http.codes.502: ................................................................ 2
http.downloaded_bytes: ......................................................... 100364
http.request_rate: ............................................................. 1000/sec
http.requests: ................................................................. 10000
http.response_time:
min: ......................................................................... 3
max: ......................................................................... 1059
mean: ........................................................................ 12.8
median: ...................................................................... 10.1
p95: ......................................................................... 23.8
p99: ......................................................................... 40
http.responses: ................................................................ 2177
vusers.completed: .............................................................. 2176
vusers.created: ................................................................ 9999
vusers.created_by_name.0: ...................................................... 9999
vusers.failed: ................................................................. 7825
vusers.session_length:
min: ......................................................................... 11.7
max: ......................................................................... 7424.1
mean: ........................................................................ 158
median: ...................................................................... 19.1
p95: ......................................................................... 54.1
p99: ......................................................................... 3328.3
--------------------------------------
Metrics for period to: 14:38:20(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 7480
errors.ETIMEDOUT: .............................................................. 480
http.codes.200: ................................................................ 1393
http.codes.502: ................................................................ 534
http.downloaded_bytes: ......................................................... 147916
http.request_rate: ............................................................. 992/sec
http.requests: ................................................................. 9908
http.response_time:
min: ......................................................................... 0
max: ......................................................................... 1030
mean: ........................................................................ 16.3
median: ...................................................................... 10.9
p95: ......................................................................... 45.2
p99: ......................................................................... 68.7
http.responses: ................................................................ 1927
vusers.completed: .............................................................. 1927
vusers.created: ................................................................ 9908
vusers.created_by_name.0: ...................................................... 9908
vusers.failed: ................................................................. 7960
vusers.session_length:
min: ......................................................................... 9.9
max: ......................................................................... 7477.7
mean: ........................................................................ 83.4
median: ...................................................................... 21.1
p95: ......................................................................... 74.4
p99: ......................................................................... 1224.4
--------------------------------------
Metrics for period to: 14:38:30(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 7029
errors.ETIMEDOUT: .............................................................. 424
http.codes.200: ................................................................ 2456
http.codes.502: ................................................................ 2
http.downloaded_bytes: ......................................................... 113290
http.request_rate: ............................................................. 1010/sec
http.requests: ................................................................. 10091
http.response_time:
min: ......................................................................... 1
max: ......................................................................... 7326
mean: ........................................................................ 200.2
median: ...................................................................... 13.9
p95: ......................................................................... 67.4
p99: ......................................................................... 7260.8
http.responses: ................................................................ 2458
vusers.completed: .............................................................. 2459
vusers.created: ................................................................ 10091
vusers.created_by_name.0: ...................................................... 10091
vusers.failed: ................................................................. 7453
vusers.session_length:
min: ......................................................................... 13.1
max: ......................................................................... 7534.9
mean: ........................................................................ 328.5
median: ...................................................................... 27.4
p95: ......................................................................... 1249.1
p99: ......................................................................... 7260.8
Phase completed: high load (index: 2, duration: 60s) 14:38:37(+0900)
High Load 단계는 서버가 극단적인 부하 상황에서도 어떻게 동작하는지 평가하는 단계다.
단계에서의 메트릭을 분석하여 서버의 성능을 평가하고 문제를 식별하며 서버 확장이 필요한지 여부를 판단할 수 있다.
주요 메트릭 분석
1) HTTP 요청 수와 응답 수
- 첫 번째 기간 (10초)
- http.requests: 6202
- http.responses: 5143
- 두 번째 기간 (10초)
- http.requests: 9430
- http.responses: 1366
- 세 번째 기간 (10초)
- http.requests: 10570
- http.responses: 2245
- 네 번째 기간 (10초)
- http.requests: 10000
- http.responses: 2177
- 다섯 번째 기간 (10초)
- http.requests: 9908
- http.responses: 1927
- 여섯 번째 기간 (10초)
- http.requests: 10091
- http.responses: 2458
요청 수는 대부분의 기간에서 9000 이상이며 응답 수는 요청 수에 비해 상당히 낮다.
서버가 많은 요청을 처리하지 못하고 있다.
2) HTTP 응답 코드
- 첫 번째 기간*
- http.codes.200: 5143
- 두 번째 기간:
- http.codes.200: 1365
- http.codes.502: 1
- 세 번째 기간:
- http.codes.200: 781
- http.codes.502: 1464
- 네 번째 기간
- http.codes.200: 2175
- http.codes.502: 2
- 다섯 번째 기간
- http.codes.200: 1393
- http.codes.502: 534
- 여섯 번째 기간
- http.codes.200: 2456
- http.codes.502: 2
http.codes.502 (Bad Gateway) 오류가 빈번히 발생한다. 서버가 요청을 제대로 처리하지 못하고 있음을 나타낸다.
http.codes.502 오류는 부하가 증가함에 따라 급증한다.
3) HTTP 응답 시간
- 첫 번째 기간
- mean: 14.8ms
- p95: 29.1ms
- p99: 40ms
- 두 번째 기간
- mean: 338.3ms
- p95: 153ms
- p99: 6064.7ms
- 세 번째 기간
- mean: 15.3ms
- p95`: 34.1ms
- p99: 62.2ms
- 네 번째 기간
- mean: 12.8ms
- p95: 23.8ms
- p99: 40ms
- 다섯 번째 기간
- mean: 16.3ms
- p95: 45.2ms
- p99: 68.7ms
- 여섯 번째 기간
- mean: 200.2ms
- p95: 67.4ms
- p99: 7260.8ms
응답 시간이 전반적으로 증가하며 특히 p99 응답 시간이 심각하게 증가했다.
서버가 높은 부하를 처리하지 못하고 있다.
4) 가상 사용자(VUsers)
- 첫 번째 기간
- vusers.created: 6204
- vusers.completed: 5143
- vusers.failed: 384
- 두 번째 기간
- vusers.created: 9431
- vusers.completed: 1365
- vusers.failed: 5403
- 세 번째 기간
- vusers.created: 10570
- vusers.completed: 2246
- vusers.failed: 10959
- 네 번째 기간
- vusers.created: 9999
- vusers.completed: 2176
- vusers.failed: 7825
- 다섯 번째 기간
- vusers.created: 9908
- vusers.completed: 1927
- vusers.failed: 7960
- 여섯 번째 기간
- vusers.created: 10091
- vusers.completed: 2459
- vusers.failed: 7453
가상 사용자의 실패 비율이 매우 높다. 서버가 요청을 제대로 처리하지 못해 많은 사용자가 세션을 완료하지 못함을 의미한다.
5) 세션 길이
- 첫 번째 기간
- mean: 34.6s
- p95: 56.3s
- p99: 96.6s
- 두 번째 기간
- mean: 1493s
- p95: 3534.1s
- p99: 6064.7s
- 세 번째 기간
- mean: 93.3s
- p95: 71.5s
- p99: 1249.1s
- 네 번째 기간
- mean: 158s
- p95: 54.1s
- p99: 3328.3s
- 다섯 번째 기간
- mean: 83.4s
- p95: 74.4s
- p99: 1224.4s
- 여섯 번째 기간
- mean: 328.5s
- p95: 1249.1s
- p99: 7260.8s
세션 길이가 평균적으로 증가했으며 p99 값이 매우 높아졌다.
서버가 부하가 극단적으로 증가할 때 세션 처리 시간이 크게 늘어난다는 것을 나타낸다.
High Load 단계 결론
서버의 성능
- 서버는 높은 부하를 처리하는 데 어려움을 겪고 있으며 요청 수에 비해 응답 수가 낮다.
- HTTP 502 오류와 같은 서버 에러가 빈번하게 발생한다.
- 응답 시간이 급격히 증가하고 세션 길이도 비정상적으로 증가했다.
서버 확장 필요성
- 현재 서버는 높은 부하를 처리할 수 있는 충분한 용량을 갖추고 있지 않으며 트래픽이 급증할 경우 성능이 크게 저하된다.
- 서버 확장(스케일 아웃) 또는 추가적인 로드 밸런싱 및 캐싱 전략을 통해 이러한 부하를 분산시키고 성능을 개선할 필요가 있다.
서버의 처리 용량을 확장하고 트래픽 관리 및 최적화 전략을 수립하는 것이 필요하다.
sustained load 단계
Phase started: sustained load (index: 3, duration: 60s) 14:38:37(+0900)
--------------------------------------
Metrics for period to: 14:38:40(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 7121
errors.ETIMEDOUT: .............................................................. 589
http.codes.200: ................................................................ 1341
http.codes.502: ................................................................ 1
http.downloaded_bytes: ......................................................... 61843
http.request_rate: ............................................................. 879/sec
http.requests: ................................................................. 8775
http.response_time:
min: ......................................................................... 1
max: ......................................................................... 7253
mean: ........................................................................ 42.2
median: ...................................................................... 12.1
p95: ......................................................................... 46.1
p99: ......................................................................... 1002.4
http.responses: ................................................................ 1342
vusers.completed: .............................................................. 1342
vusers.created: ................................................................ 8774
vusers.created_by_name.0: ...................................................... 8774
vusers.failed: ................................................................. 7710
vusers.session_length:
min: ......................................................................... 12.9
max: ......................................................................... 7383.4
mean: ........................................................................ 125.8
median: ...................................................................... 23.3
p95: ......................................................................... 90.9
p99: ......................................................................... 3197.8
--------------------------------------
Metrics for period to: 14:38:50(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 1395
errors.ETIMEDOUT: .............................................................. 380
http.codes.200: ................................................................ 1617
http.codes.502: ................................................................ 1963
http.downloaded_bytes: ......................................................... 382573
http.request_rate: ............................................................. 500/sec
http.requests: ................................................................. 5001
http.response_time:
min: ......................................................................... 2
max: ......................................................................... 8780
mean: ........................................................................ 178.5
median: ...................................................................... 8.9
p95: ......................................................................... 47.9
p99: ......................................................................... 7260.8
http.responses: ................................................................ 3580
vusers.completed: .............................................................. 3580
vusers.created: ................................................................ 5000
vusers.created_by_name.0: ...................................................... 5000
vusers.failed: ................................................................. 1775
vusers.session_length:
min: ......................................................................... 10
max: ......................................................................... 8819.4
mean: ........................................................................ 347.8
median: ...................................................................... 17.6
p95: ......................................................................... 3072.4
p99: ......................................................................... 7407.5
--------------------------------------
Metrics for period to: 14:39:00(+0900) (width: 9.996s)
--------------------------------------
errors.ECONNRESET: ............................................................. 853
errors.ETIMEDOUT: .............................................................. 251
http.codes.200: ................................................................ 2300
http.codes.502: ................................................................ 1477
http.downloaded_bytes: ......................................................... 337689
http.request_rate: ............................................................. 500/sec
http.requests: ................................................................. 4997
http.response_time:
min: ......................................................................... 0
max: ......................................................................... 7319
mean: ........................................................................ 122.8
median: ...................................................................... 10.1
p95: ......................................................................... 26.8
p99: ......................................................................... 7117
http.responses: ................................................................ 3777
vusers.completed: .............................................................. 3776
vusers.created: ................................................................ 5000
vusers.created_by_name.0: ...................................................... 5000
vusers.failed: ................................................................. 1104
vusers.session_length:
min: ......................................................................... 10.8
max: ......................................................................... 7327.6
mean: ........................................................................ 181.5
median: ...................................................................... 19.1
p95: ......................................................................... 83.9
p99: ......................................................................... 7117
--------------------------------------
Metrics for period to: 14:39:10(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 1227
errors.ETIMEDOUT: .............................................................. 360
http.codes.200: ................................................................ 2203
http.codes.502: ................................................................ 1132
http.downloaded_bytes: ......................................................... 279062
http.request_rate: ............................................................. 500/sec
http.requests: ................................................................. 5004
http.response_time:
min: ......................................................................... 0
max: ......................................................................... 7322
mean: ........................................................................ 176.7
median: ...................................................................... 8.9
p95: ......................................................................... 46.1
p99: ......................................................................... 7117
http.responses: ................................................................ 3335
vusers.completed: .............................................................. 3336
vusers.created: ................................................................ 5001
vusers.created_by_name.0: ...................................................... 5001
vusers.failed: ................................................................. 1587
vusers.session_length:
min: ......................................................................... 10.4
max: ......................................................................... 7334.6
mean: ........................................................................ 235.4
median: ...................................................................... 18.4
p95: ......................................................................... 1043.3
p99: ......................................................................... 7117
--------------------------------------
Metrics for period to: 14:39:20(+0900) (width: 9.997s)
--------------------------------------
errors.ECONNRESET: ............................................................. 301
errors.ETIMEDOUT: .............................................................. 391
http.codes.200: ................................................................ 3714
http.codes.502: ................................................................ 563
http.downloaded_bytes: ......................................................... 259189
http.request_rate: ............................................................. 500/sec
http.requests: ................................................................. 4999
http.response_time:
min: ......................................................................... 0
max: ......................................................................... 7580
mean: ........................................................................ 281.7
median: ...................................................................... 10.1
p95: ......................................................................... 1043.3
p99: ......................................................................... 7260.8
http.responses: ................................................................ 4277
vusers.completed: .............................................................. 4276
vusers.created: ................................................................ 5000
vusers.created_by_name.0: ...................................................... 5000
vusers.failed: ................................................................. 692
vusers.session_length:
min: ......................................................................... 9.8
max: ......................................................................... 8242.4
mean: ........................................................................ 357.7
median: ...................................................................... 18.7
p95: ......................................................................... 3072.4
p99: ......................................................................... 7260.8
--------------------------------------
Metrics for period to: 14:39:30(+0900) (width: 9.999s)
--------------------------------------
errors.ECONNRESET: ............................................................. 285
errors.ETIMEDOUT: .............................................................. 307
http.codes.200: ................................................................ 4383
http.downloaded_bytes: ......................................................... 201664
http.request_rate: ............................................................. 500/sec
http.requests: ................................................................. 4997
http.response_time:
min: ......................................................................... 0
max: ......................................................................... 7523
mean: ........................................................................ 337.2
median: ...................................................................... 12.1
p95: ......................................................................... 3011.6
p99: ......................................................................... 7260.8
http.responses: ................................................................ 4383
vusers.completed: .............................................................. 4384
vusers.created: ................................................................ 4998
vusers.created_by_name.0: ...................................................... 4998
vusers.failed: ................................................................. 592
vusers.session_length:
min: ......................................................................... 11.7
max: ......................................................................... 8318
mean: ........................................................................ 416.8
median: ...................................................................... 23.8
p95: ......................................................................... 3072.4
p99: ......................................................................... 7260.8
Phase completed: sustained load (index: 3, duration: 60s) 14:39:37(+0900)
Sustained Load 단계는 서버가 장시간 동안 일정한 부하를 견딜 수 있는지를 평가하는 단계다.
이 단계에서의 메트릭을 분석하여 서버의 안정성 및 성능을 확인하고 장기적인 부하에 대한 서버의 대응 능력을 평가할 수 있다.
주요 메트릭 분석
1) HTTP 요청 수와 응답 수
- 첫 번째 기간 (10초)
- `http.requests`: 8775
- `http.responses`: 1342
- 두 번째 기간 (10초)
- `http.requests`: 5001
- `http.responses`: 3580
- 세 번째 기간 (10초)
- `http.requests`: 4997
- `http.responses`: 3777
- 네 번째 기간 (10초)
- `http.requests`: 5004
- `http.responses`: 3335
- 다섯 번째 기간 (10초)
- `http.requests`: 4999
- `http.responses`: 4277
- 여섯 번째 기간 (10초)
- `http.requests`: 4997
- `http.responses`: 4383
요청 수는 일정하게 유지되지만 응답 수는 낮고 변동성이 있다. 서버는 많은 요청을 처리하지 못하고 있는 것으로 볼 수 있다.
2) HTTP 응답 코드
- 첫 번째 기간
- `http.codes.200`: 1341
- `http.codes.502`: 1
- 두 번째 기간
- `http.codes.200`: 1617
- `http.codes.502`: 1963
- 세 번째 기간
- `http.codes.200`: 2300
- `http.codes.502`: 1477
- 네 번째 기간
- `http.codes.200`: 2203
- `http.codes.502`: 1132
- 다섯 번째 기간
- `http.codes.200`: 3714
- `http.codes.502`: 563
- 여섯 번째 기간
- `http.codes.200`: 4383
- `http.codes.502`: 0
http.codes.502 (Bad Gateway) 오류가 각 기간마다 발생하며 특히 두 번째 기간에 1963회로 급증했다.
이후에는 줄어들지만 여전히 오류가 발생했다. 이 오류는 서버가 요청을 제대로 처리하지 못하는 상황을 나타낸다.
3) HTTP 응답 시간
- 첫 번째 기간
- `mean`: 42.2ms
- `p95`: 46.1ms
- `p99`: 1002.4ms
- 두 번째 기간
- `mean`: 178.5ms
- `p95`: 47.9ms
- `p99`: 7260.8ms
- 세 번째 기간
- `mean`: 122.8ms
- `p95`: 26.8ms
- `p99`: 7117ms
- 네 번째 기간
- `mean`: 176.7ms
- `p95`: 46.1ms
- `p99`: 7117ms
- 다섯 번째 기간
- `mean`: 281.7ms
- `p95`: 1043.3ms
- `p99`: 7260.8ms
- 여섯 번째 기간
- `mean`: 337.2ms
- `p95`: 3011.6ms
- `p99`: 7260.8ms
응답 시간이 전반적으로 증가하며 특히 p99 응답 시간이 급격히 증가했다.
서버가 지속적인 부하를 받으면서 성능이 급격히 저하되고 있음을 의미한다.
4) 가상 사용자(VUsers)
- 첫 번째 기간
- `vusers.created`: 8774
- `vusers.completed`: 1342
- `vusers.failed`: 7710
- 두 번째 기간
- `vusers.created`: 5000
- `vusers.completed`: 3580
- `vusers.failed`: 1775
- 세 번째 기간
- `vusers.created`: 5000
- `vusers.completed`: 3776
- `vusers.failed`: 1104
- 네 번째 기간
- `vusers.created`: 5001
- `vusers.completed`: 3336
- `vusers.failed`: 1587
- 다섯 번째 기간
- `vusers.created`: 5000
- `vusers.completed`: 4276
- `vusers.failed`: 692
- 여섯 번째 기간
- `vusers.created`: 4998
- `vusers.completed`: 4384
- `vusers.failed`: 592
가상 사용자 실패 비율이 여전히 높으며 특히 첫 번째 기간에 비해 실패율이 감소하는 추세를 볼 수 있다. 하지만 여전히 높은 비율의 실패가 기록되었다.
5) 세션 길이
- 첫 번째 기간
- `mean`: 125.8s
- `p95`: 90.9s
- `p99`: 3197.8s
- 두 번째 기간
- `mean`: 347.8s
- `p95`: 3072.4s
- `p99`: 7407.5s
- 세 번째 기간
- `mean`: 181.5s
- `p95`: 83.9s
- `p99`: 7117s
- 네 번째 기간
- `mean`: 235.4s
- `p95`: 1043.3s
- `p99`: 7117s
- 다섯 번째 기간
- `mean`: 357.7s
- `p95`: 3072.4s
- `p99`: 7260.8s
- 여섯 번째 기간
- `mean`: 416.8s
- `p95`: 3072.4s
- `p99`: 7260.8s
세션 길이 또한 평균적으로 증가하며 p99 값이 매우 높다. 서버가 부하를 지속적으로 받으면서 세션 처리 시간이 크게 증가하고 있다.
Sustained Load 단계 결론
서버의 성능
- 서버는 지속적인 부하에 대한 처리 능력이 부족하며 요청 수에 비해 응답 수가 여전히 낮다.
- HTTP 502 오류와 같은 서버 오류가 빈번하게 발생해 서버가 요청을 제대로 처리하지 못하는 상황이 존재한다.
- 응답 시간이 급격히 증가하며 p99 응답 시간이 매우 높다.
서버 안정성
- 가상 사용자의 실패 비율이 여전히 높으며 서버의 안정성에 문제가 있다.
- 세션 처리 시간이 비정상적으로 길어지는 경향이 있다.
서버 확장 필요성
- 서버는 장시간 동안 지속적인 부하를 처리할 수 있는 능력을 갖추고 있지 않으며 트래픽과 부하를 효과적으로 처리할 수 있는 확장이 필요하다.
- 서버의 성능을 개선하기 위한 추가적인 최적화와 부하를 분산시키는 전략이 필요하다.
서버 성능을 유지하거나 향상시키기 위해 필요한 조치를 식별하고 장기적인 부하를 견디기 위한 계획을 수립하는 것이 필요하다.
Cool down 단계 분석
Phase completed: cool down (index: 4, duration: 30s) 14:40:07(+0900)
--------------------------------------
Metrics for period to: 14:40:10(+0900) (width: 9.918s)
--------------------------------------
errors.ETIMEDOUT: .............................................................. 111
http.codes.200: ................................................................ 660
http.downloaded_bytes: ......................................................... 30360
http.request_rate: ............................................................. 100/sec
http.requests: ................................................................. 768
http.response_time:
min: ......................................................................... 6
max: ......................................................................... 7308
mean: ........................................................................ 631.9
median: ...................................................................... 8.9
p95: ......................................................................... 7117
p99: ......................................................................... 7260.8
http.responses: ................................................................ 660
vusers.completed: .............................................................. 660
vusers.created: ................................................................ 768
vusers.created_by_name.0: ...................................................... 768
vusers.failed: ................................................................. 111
vusers.session_length:
min: ......................................................................... 11.9
max: ......................................................................... 7315.3
mean: ........................................................................ 698.8
median: ...................................................................... 16.3
p95: ......................................................................... 7117
p99: ......................................................................... 7260.8
--------------------------------------
Metrics for period to: 14:40:20(+0900) (width: 7.335s)
--------------------------------------
errors.ETIMEDOUT: .............................................................. 99
http.codes.200: ................................................................ 46
http.downloaded_bytes: ......................................................... 2116
http.response_time:
min: ......................................................................... 10
max: ......................................................................... 7295
mean: ........................................................................ 6840
median: ...................................................................... 7117
p95: ......................................................................... 7260.8
p99: ......................................................................... 7260.8
http.responses: ................................................................ 46
vusers.completed: .............................................................. 46
vusers.failed: ................................................................. 99
vusers.session_length:
min: ......................................................................... 3025.5
max: ......................................................................... 7302.6
mean: ........................................................................ 6912.5
median: ...................................................................... 7117
p95: ......................................................................... 7260.8
p99: ......................................................................... 7260.8
All VUs finished. Total time: 3 minutes, 41 seconds
--------------------------------
Summary report @ 14:40:19(+0900)
--------------------------------
errors.ECONNRESET: ............................................................. 48977
errors.ETIMEDOUT: .............................................................. 5765
http.codes.200: ................................................................ 47591
http.codes.502: ................................................................ 8667
http.downloaded_bytes: ......................................................... 3549905
http.request_rate: ............................................................. 487/sec
http.requests: ................................................................. 111000
http.response_time:
min: ......................................................................... 0
max: ......................................................................... 8839
mean: ........................................................................ 147.9
median: ...................................................................... 10.1
p95: ......................................................................... 70.1
p99: ......................................................................... 7117
http.responses: ................................................................ 56258
vusers.completed: .............................................................. 56258
vusers.created: ................................................................ 111000
vusers.created_by_name.0: ...................................................... 111000
vusers.failed: ................................................................. 54742
vusers.session_length:
min: ......................................................................... 9.4
max: ......................................................................... 9284.9
mean: ........................................................................ 240.8
median: ...................................................................... 20.3
p95: ......................................................................... 1176.4
p99: ......................................................................... 7117
성능 데이터 요약
- 오류 및 응답 코드
- ETIMEDOUT: 111 (14:40:10), 99 (14:40:20)
- http.codes.200: 660 (14:40:10), 46 (14:40:20)
- http.codes.502: 없음 (14:40:10), 없음 (14:40:20)
- 응답 시간
- 평균 응답 시간: 631.9ms (14:40:10), 6840ms (14:40:20)
- p95 응답 시간: 7117ms (14:40:10), 7260.8ms (14:40:20)
- p99 응답 시간: 7260.8ms (14:40:10), 7260.8ms (14:40:20)
- 세션 길이
- 평균 세션 길이: 698.8s (14:40:10), 6912.5s (14:40:20)
- 전체 요약
- 전체 요청 수: 111,000
- 전체 완료된 가상 사용자 수: 56,258
- 전체 실패 수: 54,742
- 평균 응답 시간: 147.9ms
- p95 응답 시간: 70.1ms
- p99 응답 시간: 7117ms
1) 응답 시간 및 오류 분석
- Cool Down 단계에서는 응답 시간이 높아지며 p99 응답 시간이 7117ms로 유지됐다. 이는 서버의 성능이 떨어져 있음을 나타낸다.
- ETIMEDOUT 오류가 여전히 존재하며 요청 수와 비교했을 때 오류 비율이 꽤 높다.
2) 서버 성능 평가
- 고부하와 지속 부하 단계에서 서버의 성능 저하가 두드러졌다. Cool Down 단계에서 성능이 회복되기까지 시간이 걸리며 서버 부하에 대한 처리가 지연되었다.
3) 서버 대수 추정
- 현재 서버 두 대로는 Sustained Load 단계의 높은 요청 수와 오류 비율을 처리하기 어려운 것 같다.
- 성능 저하 및 오류 발생률을 감안한다면 서버의 성능을 안정화하고 높은 트래픽을 처리하기 위해 서버 대수를 더 늘려야 한다.
총정리
1) 성능 분석 및 서버 대수 추정
테스트 결과 요약
- Warm Up (30초, 100 요청/초)
- 서버 두 대에서 성능 안정적
- HTTP 200 응답률이 99.9%
- 평균 응답 시간 및 오류 발생률 낮음
- Initial Peak (30초, 500 요청/초)
- 응답 시간이 평균 59.9ms로 증가
- HTTP 502 오류 발생 (2,238건)
- ECONNRESET 및 ETIMEDOUT 오류 발생
- High Load (60초, 1,000 요청/초)
- 응답 시간이 평균 147.9ms, `p99` 7117ms로 급격히 증가
- 오류 발생률 대폭 증가 (ECONNRESET 48,977, ETIMEDOUT 5,765)
- 서버의 성능 저하 심각
- Sustained Load (60초, 500 요청/초)
- 응답 시간 평균 240.8ms, `p99` 7117ms
- 오류 발생률 여전히 높음 (ECONNRESET 49,977, ETIMEDOUT 5,765)
- 가상 사용자의 실패 비율 증가
- Cool Down (30초, 100 요청/초)
- 응답 시간이 평균 631.9ms, `p99` 7260.8ms로 여전히 길어짐
- ETIMEDOUT 오류 지속
서버 대수 추정
1) 요구사항 분석
-Warm Up 단계에서는 서버 두 대로 충분한 성능을 보임
- Initial Peak부터는 성능 저하가 발생하며 High Load와 Sustained Load 단계에서 성능 문제가 심각하게 나타남
- Cool Down 단계에서도 응답 시간이 길어져 여전히 성능이 저하됨
2) 서버 확장 계산
- High Load와 Sustained Load 단계에서의 성능 저하를 고려하여 추가 서버 필요성을 분석함
- 서버 두 대에서의 처리량과 오류 비율을 기준으로 필요한 서버 대수를 추정함
3) 계산 예시
- High Load 단계의 요청 처리량을 기준으로 서버 두 대의 한계를 평가함
- 평균 요청 수와 응답 시간, 오류 비율을 바탕으로 서버 수를 조정함
High Load 단계의 요청 처리 예시
- 요청 수: 60,000
- 서버 두 대가 처리할 수 있는 요청 수를 기준으로 서버 두 대의 처리 능력을 초과했기 때문에 추가 서버가 필요함
Sustained Load 단계의 요청 처리 예시
- 요청 수: 30,000
- 현재 서버 두 대로는 성능 저하가 발생하므로 추가 서버가 필요함
4) 계산식
필요 서버 수 = (테스트에서 관측된 요청 수 / 서버 두 대의 요청 처리량) × 보정 계수
High Load 단계에서 서버 두 대의 요청 처리 능력을 기준으로 보정 계수를 적용하여 필요한 서버 수를 계산한다.
보정 계수는 테스트 환경과 실제 운영 환경의 차이를 반영하기 위해 사용했다.
일반적으로 경험적 데이터를 바탕으로 1.5배에서 3배 사이에서 설정한다.
실제 운영 환경에서의 성능 데이터를 바탕으로 조정이 필요하기 때문에 테스트 결과와 실제 환경의 차이를 고려해서 적절한 보정 계수를 설정해야 한다.
필요 서버 수 = (60,000 / 30,000) × 2 = 4
서버 두 대가 처리할 수 있는 요청 수가 60,000이라고 가정할 때 보정 계수를 적용하여 서버 수를 계산한다.
여기서 보정 계수는 2로 가정했으며 실제 상황에 따라 조정이 필요할 수 있다.
최종 결론
- Warm Up: 서버 두 대로 충분
- Initial Peak: 성능 저하를 고려하여 서버 3대 이상 필요(요청 수가 급격히 증가하면서 서버 두 대로는 성능 저하 발생. 보정 계수 1.5를 적용)
- High Load: 현재 서버 두 대로는 처리 불가능, 서버 10대 이상으로 확장 필요(요청 수와 오류 비율을 감안하여 서버 두 대로는 처리 불가능. 보정 계수 2.0을 적용)
- Sustained Load: 성능 유지와 안정성을 위해 서버 5~7대로 확장 필요(성능 유지와 안정성을 위해 보정 계수 1.5를 적용)
- Cool Down: 부하 감소에 따라 서버 3~4대 유지 또는 확장 검토 필요(부하 감소에 따라 성능 안정성을 유지하기 위해 서버 3~4대 필요. 보정 계수 1.5를 적용)
'네트워크 캠퍼스 > 3차 프로젝트' 카테고리의 다른 글
ISMS (0) | 2024.08.26 |
---|---|
failover 동작 원리와 실습하기 (0) | 2024.08.26 |
federation 심화 - 인스턴스별로 라벨처리하기 (0) | 2024.08.16 |
오토스케일링과 로드밸런서로 요금최적화하기 (1) | 2024.08.15 |
프로메테우스 페더레이트 설정하기 + 알람 등록하기 (0) | 2024.08.13 |