프로파일 개념
프로파일 개념 (Concepts)
프로파일링(profiling)을 제대로 활용하려면 몇 가지 핵심 개념을 이해해야 해요. 여기서는 프로파일 데이터의 계층 구조, 프로파일 유형, 라벨, 플레임 그래프, 그리고 exemplar에 대해 살펴볼게요.
출처: 문서
본문
프로파일 데이터 계층 구조 (Profile data hierarchy)
각 프로파일은 서비스(service)에 대한 데이터를 담고 있어요. 서비스는 시스템이나 애플리케이션에서 실행 중인 프로세스 중 하나가 될 수 있죠. 그리고 각 서비스는 CPU, 메모리, 예외(exceptions), 락(locks) 같은 여러 프로파일 유형을 가지며, 이 프로파일들이 서비스 내 프로세스에 대한 세부 정보를 제공해요.
프로파일 유형 (Profile types)
프로파일 유형은 CPU 사용량, 메모리 할당, 스레드 동기화 같은 특정 측면에 초점을 맞춘 애플리케이션 성능 분석의 서로 다른 차원을 뜻해요.
| 프로파일 유형 | 보여주는 내용 | 사용 시점 |
|---|---|---|
| CPU profiling | 애플리케이션 코드의 각 부분이 소비한 CPU 시간 측정 | CPU 집약적인 함수를 식별하고 최적화할 때 |
| Memory allocation | 애플리케이션이 수행한 메모리 할당의 양과 빈도 추적 | 메모리 사용 패턴을 식별하고 최적화할 때 |
| Goroutine | Go의 경량 루틴(goroutine) 사용량과 성능 측정 | 특히 Go 애플리케이션에서 동시성 관리에 유용 |
| Contentions (Mutex) | 뮤텍스(mutex) 잠금 분석. 공유 리소스에 대한 동시 접근을 막는 데 사용 | 스레드 동기화를 최적화하고 락 경합을 줄일 때 |
| Block | 스레드가 일시 중지되거나 지연되는 블로킹 연산의 빈도와 지속 시간 측정 | 블로킹 지연을 식별하고 줄일 때 |
라벨 (Labels)
라벨은 프로파일 데이터의 일부를 식별하는 데 도움을 줘요. 예를 들어 Kubernetes Pod 이름, 네임스페이스, 저장소, 참조(references)를 식별해요. 커스텀 라벨도 만들 수 있어요. 이 기능은 성능 이상 징후를 식별하고 다양한 조건에서 애플리케이션 세그먼트의 동작을 이해하는 데 매우 중요해요.
플레임 그래프 (Flame graphs)
지속적 프로파일링(continuous profiling)의 기본 요소는 플레임 그래프로, 성능 데이터를 시각화하는 편리한 방법이에요. 애플리케이션의 리소스 할당과 병목 현상을 명확하고 직관적으로 이해할 수 있게 해주죠. 플레임 그래프 시각화는 특정 상황(예: CPU 다운스택 분석)이 필요할 때 사용하면 좋아요.
Exemplars
Exemplar는 타임시리즈 패널 위에 다이아몬드 모양 마커로 나타나는 개별 프로파일이에요. 플레임 그래프는 보통 선택한 시간 범위의 모든 프로파일을 집계해 보여주지만, exemplar를 클릭하면 특정 개별 프로파일 하나를 살펴볼 수 있어요. 예를 들어 CPU 스파이크 시점에 정확히 무슨 일이 있었는지 이해하기 쉬워지죠. 각 exemplar에는 프로파일 ID, 샘플 값, 그리고 pod·namespace·cluster 같은 추가 컨텍스트를 제공하는 연관 라벨이 포함돼요.