프로파일 개념

프로파일 개념 (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 같은 추가 컨텍스트를 제공하는 연관 라벨이 포함돼요.

더 알아보기 (Learn more)