티스토리 뷰

메트릭 혹은 성능 테스트 결과를 보다보면, 많이 볼 수 있는 숫자가 있다.

P90, P95, P99

 

이 숫자가 의미하는 것은 무엇일까? => 바로 백분위수(Percentile)이다.

  • 백분위 수는 전체 데이터를 순서대로 나열했을 때, 특정 위치의 값을 의미한다.
  • p90은 90번째 백분위수라는 의미로 전체 데이터 중 90%가 이 값보다 작다는 의미이다.
  • 예를 들어, Resposne time이 p90 = 200ms라면, 전체 요청 중 90%는 200ms보다 빠르게 처리된다는 것.

 


Percentile / 백분위수의 필요성

그럼, 왜 p90, p95, p99을 나눠서 볼까?

  • p90: 상위 10%를 제외한, 일반적인 상황의 성능을 보여준다
  • p95: 상위 5%를 제외한, 조금 더 엄격한 기준의 성능을 보여준다
  • p99: 상위 1%를 제외한, 매우 까다로운 기준의 성능을 보여준다

 

좋다 좋아. 근데 왜 평균 값을 이용하지 않고 Percentile(백분위수)를 이용할까?

  • 평균값은 Outlier 값에 매우 민감하게 반응하기 때문이다. 특정 값이 매우 크거나 적으면 평균값도 이동한다.
  • 즉, 대부분의 요청은 정상이지만, 한 번의 느리거나 빠른 응답으로 평균이 크게 왜곡될 수 있다는 것이다.
  • 백분위수는 이런 Outlier 값에 영향을 받지 않고 실제 사용자 경험을 더 잘 반영한다.
# Example / 예제
Response time: 10ms, 15ms, 20ms, 18ms, 25ms, 1000ms
=> 평균: 181.3 ms
=> p95: 25 ms

 


Percentile / 백분위수 모니터링

Percentile(백분위수)를 통한 모니터링 전략

  • 평균값도 의미가 있을 수 있지만, 위에서 말한 평균값의 단점 때문에 모니터링에서는 백분위수를 많이 사용한다.
  • p90, p95, p99 값을 실시간으로 그래프로 모니터링 => p90/95/99마다 다르게 알림을 설정해서 활용하자.
    • p90이 적거나 높아졌다? => 대부분의 요청이 영향 받은 것
    • p99이 적거나 높아졌다? => p90은 그대로다? => 상위 9%에서 변화가 감지된 것
      • => 해당 유저가 어떤 액션을 했을까 추적이 필요 (대규모 업로드 등)
    • 모든 백분위수가 점진적으로 증가한다?
      • => 시스템 리소스 부족(memory leak, connection 고갈 등) 의심

 

예를 들어보면, 다음과 같이 모니터링 전략을 잡아볼 수도 있겠다.

  • p90 < 200ms: 대부분의 사용자가 빠른 응답을 경험
  • p95 < 500ms: 느린 응답(500ms 이상)을 경험하는 사용자를 5% 이하로 제한
  • p99 < 1초: 매우 느린 응답(1s 이상)을 경험하는 사용자를 1% 이하로 제한

 

근데 당연히 애플리케이션 및 API 상황마다 다르므로, 기존 결과를 보면서 최적화해 모니터링 전략을 잡는 것이 좋다.

  • 주요 API별로 따로 모니터링하기
    • 로그인 API: p95 < 300ms
    • 검색 API: p95 < 800ms 같은 식으로 API 특성에 맞는 목표 설정
  • 비즈니스 중요도에 따라 다른 기준 적용
    • 결제 관련: p99 기준으로 모니터링
    • 일반 조회: p95 기준으로 모니터링

 

320x100
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함