인프런 커뮤니티 질문&답변

감바스님의 프로필 이미지
감바스

작성한 질문수

백엔드 애플리케이션 성능 테스트하기

높은 부하를 받았을 때의 성능 테스트 결과 해석하기

성능 테스트 스크립트 실행결과에 대해 질문 있습니다.

해결된 질문

작성

·

70

1

성능 테스트 스크립트

config:
  target: 'http://localhost:8080'
  phases:
    - duration: 30
      arrivalRate: 20
      name: Warm up
    - duration: 10
      arrivalRate: 20
      rampTo: 2000
      name: Ramp up load
    - duration: 10
      arrivalRate: 2000
      name: Sustained load
    - duration: 30
      arrivalRate: 2000
      rampTo: 20
      name: End of load
scenarios:
  - name: "high load cpu"
    flow:
      - get:
          url: "/high-load-cpu"
  - name: "high load memory"
    flow:
      - get:
          url: "/high-load-memory"

실행결과

Started phase 0 (Warm up), duration: 30s @ 15:00:57(+0900) 2024-09-29
Report @ 15:01:07(+0900) 2024-09-29
Elapsed time: 10 seconds
  Scenarios launched:  199
  Scenarios completed: 199
  Requests completed:  199
  Mean response/sec: 20
  Response time (msec):
    min: 1
    max: 324
    median: 48
    p95: 53.5
    p99: 296
  Codes:
    200: 199

Report @ 15:01:17(+0900) 2024-09-29
Elapsed time: 20 seconds
  Scenarios launched:  200
  Scenarios completed: 200
  Requests completed:  200
  Mean response/sec: 20
  Response time (msec):
    min: 1
    max: 164
    median: 48
    p95: 49
    p99: 118.5
  Codes:
    200: 200

Report @ 15:01:27(+0900) 2024-09-29
Elapsed time: 30 seconds
  Scenarios launched:  200
  Scenarios completed: 200
  Requests completed:  200
  Mean response/sec: 20
  Response time (msec):
    min: 1
    max: 185
    median: 3
    p95: 50.5
    p99: 146
  Codes:
    200: 200

Started phase 1 (Ramp up load), duration: 10s @ 15:01:27(+0900) 2024-09-29
Report @ 15:01:37(+0900) 2024-09-29
Elapsed time: 40 seconds
  Scenarios launched:  1379
  Scenarios completed: 1330
  Requests completed:  1330
  Mean response/sec: 137.9
  Response time (msec):
    min: 1
    max: 878
    median: 63
    p95: 481
    p99: 730
  Codes:
    200: 1330

Report @ 15:01:47(+0900) 2024-09-29
Elapsed time: 50 seconds
  Scenarios launched:  1884
  Scenarios completed: 1841
  Requests completed:  1841
  Mean response/sec: 189.35
  Response time (msec):
    min: 2
    max: 2192
    median: 389
    p95: 1435.9
    p99: 1679.5
  Codes:
    200: 1841

Report @ 15:01:57(+0900) 2024-09-29
Elapsed time: 1 minute, 0 seconds
  Scenarios launched:  1938
  Scenarios completed: 1921
  Requests completed:  1921
  Mean response/sec: 197.05
  Response time (msec):
    min: 2
    max: 2391
    median: 553
    p95: 1766
    p99: 2121.3
  Codes:
    200: 1921

Report @ 15:02:07(+0900) 2024-09-29
Elapsed time: 1 minute, 10 seconds
  Scenarios launched:  1999
  Scenarios completed: 1825
  Requests completed:  1825
  Mean response/sec: 200.2
  Response time (msec):
    min: 3
    max: 3944
    median: 951
    p95: 2591.8
    p99: 2944.8
  Codes:
    200: 1825

Report @ 15:02:17(+0900) 2024-09-29
Elapsed time: 1 minute, 20 seconds
  Scenarios launched:  2051
  Scenarios completed: 1920
  Requests completed:  1920
  Mean response/sec: 203.88
  Response time (msec):
    min: 275
    max: 4463
    median: 1762.5
    p95: 3452
    p99: 3868.6
  Codes:
    200: 1920
  Errors:
    ETIMEDOUT: 15

Started phase 2 (Sustained load), duration: 10s @ 15:02:25(+0900) 2024-09-29
Report @ 15:02:27(+0900) 2024-09-29
Elapsed time: 1 minute, 30 seconds
  Scenarios launched:  2352
  Scenarios completed: 1754
  Requests completed:  1754
  Mean response/sec: 228.47
  Response time (msec):
    min: 729
    max: 5593
    median: 2867.5
    p95: 4719.8
    p99: 4972.5
  Codes:
    200: 1754
  Errors:
    EPIPE: 1
    ECONNRESET: 8
    ETIMEDOUT: 200

Report @ 15:02:37(+0900) 2024-09-29
Elapsed time: 1 minute, 40 seconds
  Scenarios launched:  5182
  Scenarios completed: 1679
  Requests completed:  1680
  Mean response/sec: 522.91
  Response time (msec):
    min: 2409
    max: 8590
    median: 5161.5
    p95: 7927
    p99: 8578.7
  Codes:
    200: 1680
  Errors:
    ETIMEDOUT: 235
    ECONNRESET: 67

Report @ 15:02:47(+0900) 2024-09-29
Elapsed time: 1 minute, 50 seconds
  Scenarios launched:  2948
  Scenarios completed: 322
  Requests completed:  321
  Mean response/sec: 294.51
  Response time (msec):
    min: 7959
    max: 9752
    median: 8775
    p95: 9748
    p99: 9750
  Codes:
    200: 321
  Errors:
    ETIMEDOUT: 3978
    ECONNRESET: 45

Report @ 15:02:57(+0900) 2024-09-29
Elapsed time: 2 minutes, 0 seconds
  Scenarios launched:  3922
  Scenarios completed: 0
  Requests completed:  0
  Mean response/sec: 392.2
  Response time (msec):
    min: NaN
    max: NaN
    median: NaN
    p95: NaN
    p99: NaN
  Errors:
    ETIMEDOUT: 2937
    ECONNRESET: 434
    EPIPE: 2

Report @ 15:03:07(+0900) 2024-09-29
Elapsed time: 2 minutes, 10 seconds
  Scenarios launched:  3060
  Scenarios completed: 0
  Requests completed:  0
  Mean response/sec: 304.17
  Response time (msec):
    min: NaN
    max: NaN
    median: NaN
    p95: NaN
    p99: NaN
  Errors:
    ETIMEDOUT: 3260
    ECONNRESET: 389
  1. 우선 30초까지는 Warm up 단계로 요청을 잘 처리한거 같습니다. 그 다음 Ramp up load 단계는 10초 동안 초당 20개에서 초당 2000개로 늘렸는데 실제 터미널 콘솔에 찍힌걸 보면 Scenarios completed: 1000

    Requests completed: 1000 이렇게 나와 있습니다. 저는 최소 2000개 요청을 보냈는데 저렇게 찍힌걸 보면 40초까지 1000개만 처리 완료했지만 실제로는 요청이 더 온 상태고 해당 요청에 대해서는 처리를 완료하지 못한 상태라고 해석하면 될까요?

  2. Sustained load 단계에서는 10초 동안 초당 2000개의 요청을 계속 보내는 상태인데요 그럼 10초 동안 총 20000개의 요청이 가야하는데 실제 실행 결과를 보면 10초 동안 20000개의 요청을 처리하지 못하고 계속해서 요청을 처리하다가 나중에는 거의 처리를 하지 못하는 상태에 오는데요 이 부분은 서버에 요청을 처리할 자원이 거의 없는 과부하 상태라고 해석하면 될까요?

     

 

답변 2

0

이준형(Foo)님의 프로필 이미지
이준형(Foo)
지식공유자

감바스님 안녕하세요~

우선 첫번째 질문주신 내용은 아래 내용으로 봤을 때 2000번에 근접하게 찍히고 있는 것 같은데, 혹시 제가 질문의 의도를 잘못 이해한건지 확인해주시면 감사하겠습니다~ 1000번으로 찍힌걸 발견하지 못해서요 ㅠ

image.png

 

2번 질문에 대한 내용은 말씀해주신 내용이 정확합니다~!

감바스님의 프로필 이미지
감바스
질문자

아 죄송합니다. 제가 Scenarios completed 부분과 Requests completed 부분을 잘못적은거 같습니다.

질문을 다시하면 Sustained load 단계에서 초당 2000개의 요청이 날라갔는데 서버에서는 2000개 이하로 처리 완료한 것을 보면 모든 요청에 대해서 처리를 완료하지 못한 상태고 처리를 못한 요청들은 서버내에서 요청들을 임시 보관하는 장소에서 대기중이라고 이해하면 될까요?

이준형(Foo)님의 프로필 이미지
이준형(Foo)
지식공유자

넵 서버쪽에서 요청을 처리하기 위한 queue에 진입하거나, 그 queue도 가득차서 요청이 버려지거나 타임아웃 나는겁니다.

0

안녕하세요, 인프런 AI 인턴입니다. 감바스님.

질문하신 두 가지 내용을 각각 해결할 수 있는 관련된 기존의 답변을 찾아 안내해 드립니다. 성능 테스트 스크립트 실행 결과에 대해 질문하신 내용과 유사한 답변을 제공하는 게시글들이 있습니다.

  1. 첫 번째 질문: 단계별 요청 처리량과 실제 요청량이 다른 이유

    • 관련 질문: postman에서 API 테스트했을 때 응답 레이턴시 차이가 있는 이유
    • 내용 요약: API 요청 시 첫 번째 요청과 이후 요청의 레이턴시 차이의 원인을 설명합니다. 이는 비슷한 성능 테스트 시에도 유효한 개념입니다. 이 경우 첫번째 요청이 느린 이유는 컴퓨터 시스템의 웜업(warm-up) 효과 때문이며, 추가 요청이 더 빠르게 처리되는 원인도 설명합니다.
  2. 두 번째 질문: 서버 자원이 과부하 상태에 있는지 여부

추가 설명

  1. 첫 번째 질문에 대한 답변 요약:
    첫 번째 Ramp up load 단계에서 초당 요청 수가 급격히 증가하는 동안, 서버가 모든 요청을 처리하지 못하고 일부 처리되지 않은 요청이 누적될 수 있습니다. 완료된 요청 수가 예정보다 적다는 것은 서버가 과도한 부하를 받아 처리 능력이 한계에 도달했음을 뜻합니다. 일반적으로 이러한 상태에서는 요청이 큐에 쌓이고, 나중에 처리되지 않아 타임아웃이 발생할 수 있습니다.

  2. 두 번째 질문에 대한 답변 요약:
    Sustained load 단계에서 서버가 전체 요청을 처리하지 못하는 현상은 서버가 과부하 상태임을 나타냅니다. 자원이 부족해지면 상당한 오류 메시지(예: ETIMEDOUT, ECONNRESET)가 발생하며, 이는 서버가 사용자의 요청을 제때 처리하지 못하고 있음의 신호입니다. 이는 서버의 자원을 확장하거나, 부하 분산 시스템을 도입해 성능을 개선할 필요가 있음을 시사합니다.

위 답변을 통해 성능 테스트 분석과 관련된 중요한 포인트들을 이해하는 데 도움이 되었기를 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

감바스님의 프로필 이미지
감바스

작성한 질문수

질문하기