티스토리 뷰
메트릭 혹은 성능 테스트 결과를 보다보면, 많이 볼 수 있는 숫자가 있다.
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
반응형
'Development > Server' 카테고리의 다른 글
서버 성능 테스트 종류 6가지 (0) | 2025.01.20 |
---|---|
Trace Sampling / 트레이스 샘플링 (1) | 2025.01.17 |
HTTP ETag - 2. Spring에서 사용하기 (0) | 2023.04.18 |
HTTP ETag - 1. 이게 뭔가요? (0) | 2023.04.16 |
Figma 원리: How Figma’s multiplayer technology works (0) | 2023.02.23 |
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준
- boj
- 알고리즘
- WebFlux
- python
- k8s
- OpenTelemetry
- 쿠버네티스
- HTTP
- tag
- Istio
- container
- gradle
- c++
- Kubernetes
- 하루
- 비동기
- 클린 아키텍처
- java
- docker
- jasync
- Intellij
- Clean Architecture
- Log
- 일상
- 로그
- Spring boot
- Algorithm
- Spring
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함