프로파일링
애플리케이션의 리소스 사용 패턴을 플레임 그래프(Flame Graph)로 시각화하여 성능 병목을 분석합니다.

프로파일링 탭에서는 애플리케이션의 리소스 사용 패턴을 플레임 그래프(Flame Graph)로 시각화합니다. 플레임 그래프는 함수 호출 스택과 리소스 소비량을 시각화하는 차트로, 성능 병목 지점을 직관적으로 파악할 수 있습니다.
프로파일링 개요
프로파일링은 애플리케이션이 실행되는 동안 어떤 함수가 얼마나 많은 리소스를 소비하는지를 분석하는 기법입니다. Observability는 다음 네 가지 프로파일 타입을 지원합니다.
| 프로파일 타입 | 설명 |
|---|---|
| CPU | 함수별 CPU 점유 시간을 분석합니다. CPU 사용률이 높은 함수를 식별하여 성능을 최적화할 수 있습니다. |
| Heap | 힙 메모리 할당 패턴을 분석합니다. 메모리를 많이 사용하는 함수나 메모리 누수 가능성이 있는 코드를 찾을 수 있습니다. Go 애플리케이션의 경우 4가지 세부 메모리 프로파일을 제공합니다. |
| Goroutine | Go 애플리케이션의 고루틴(Goroutine) 분포를 분석합니다. 고루틴이 과도하게 생성되거나 블록된 지점을 파악할 수 있습니다. |
| Block/Mutex | 동기화 잠금(Lock) 경합을 분석합니다. 뮤텍스 대기 시간이 긴 함수를 식별하여 동시성 병목을 해결할 수 있습니다. |
참고: 사용 가능한 프로파일 타입은 애플리케이션의 기술 스택과 에이전트 설정에 따라 다를 수 있습니다. 프로파일 타입이 두 개 이상인 경우에만 타입 선택 버튼이 표시됩니다.
건강 상태 패널
프로파일링 탭 상단에는 프로파일 데이터 수집 상태를 표시하는 건강 상태 패널이 있습니다.
| 상태 | 배지 | 의미 |
|---|---|---|
| 정상 | OK | 프로파일 데이터가 정상적으로 수집되고 있습니다. |
| 경고 | WARN | 수집에 일부 문제가 있으나 데이터 확인은 가능합니다. |
| 심각 | CRIT | 프로파일 데이터 수집에 심각한 문제가 있습니다. |
상태가 OK이고 연결 가능한 서비스가 있는 경우, 설정(톱니바퀴) 아이콘을 클릭하여 프로파일링 애플리케이션 연결 설정 다이얼로그를 열 수 있습니다. 이 다이얼로그에서 현재 애플리케이션과 프로파일링 서비스를 연결하거나 변경할 수 있습니다.
프로파일 타입 선택
애플리케이션에서 여러 프로파일 타입을 지원하는 경우, 상태 패널 아래에 타입 선택 버튼 그룹이 표시됩니다. 분석하려는 프로파일 타입 버튼을 클릭하면 해당 타입의 시계열 차트와 플레임 그래프가 표시됩니다.
각 프로파일 타입은 아이콘으로 구분됩니다.
- CPU 프로파일: 칩 아이콘
- Heap/메모리 프로파일: 메모리 아이콘
- Goroutine 프로파일: 분기 아이콘
- Block/Mutex 프로파일: 잠금 아이콘
시계열 차트와 구간 선택
프로파일 타입을 선택하면 시간별 프로파일 데이터 추이를 시계열 차트로 표시합니다. 차트에서 특정 시간 영역을 마우스로 드래그하여 선택하면 해당 구간의 플레임 그래프가 표시됩니다.
플레임 그래프 시각화
플레임 그래프는 함수 호출 스택을 수평 막대로 시각화한 차트입니다.
플레임 그래프 읽는 법:
- 가로 막대의 너비가 넓을수록 해당 함수가 더 많은 리소스를 사용하고 있음을 의미합니다.
- 세로 방향은 함수 호출의 깊이를 나타냅니다. 아래에서 위로 갈수록 상위 호출 스택입니다.
- 막대를 클릭하면 해당 함수를 기준으로 확대하여 하위 호출 스택을 상세히 확인할 수 있습니다.
- 0.5% 미만의 리소스를 사용하는 함수는 시각적 명확성을 위해 기본적으로 생략됩니다.
인스턴스 선택
플레임 그래프 상단의 인스턴스 선택기에서 특정 인스턴스를 선택하면, 해당 인스턴스의 프로파일만 표시됩니다. 전체 인스턴스를 선택하면 모든 인스턴스의 프로파일을 통합하여 표시합니다. 인스턴스별로 성능 특성이 다를 수 있으므로, 특정 인스턴스에서 문제가 의심되는 경우 해당 인스턴스만 선택하여 분석하면 효과적입니다.
이전 기간 비교 모드
시계열 차트에서 시간 구간을 드래그하여 선택하면, 선택 구간의 플레임 그래프를 표시할 뿐만 아니라 이전 동일 길이 기간과의 비교 분석을 수행할 수 있습니다.
비교 모드 사용법:
- 시계열 차트에서 분석하려는 시간 구간을 드래그하여 선택합니다.
- 선택한 구간과 동일한 길이의 직전 기간이 자동으로 비교 대상으로 설정됩니다.
- 플레임 그래프에서 이전 기간 대비 증가 또는 감소한 함수를 시각적으로 확인할 수 있습니다.
비교 모드를 활용하면 배포 전후의 성능 변화나 특정 시간대의 성능 저하 원인을 분석하는 데 유용합니다.
팁: 차트 영역 위에 표시되는 안내 문구("차트 영역을 선택하여 확대하거나 이전 기간과 비교하세요")를 참고하여 구간 선택 기능을 활용하세요.
Go 메모리 프로파일링
Go 애플리케이션의 경우 Heap 프로파일이 4가지 세부 타입으로 제공되어 메모리 사용 패턴을 다각도로 분석할 수 있습니다.
객체 할당 (Alloc Objects)

누적 할당된 객체 수를 분석합니다. 어떤 함수가 가장 많은 객체를 생성하는지 파악할 수 있습니다. 빈번한 객체 할당은 GC(Garbage Collection) 부하를 유발할 수 있으므로, 할당 빈도가 높은 함수를 최적화 대상으로 검토합니다.
사용 중 객체 (Inuse Objects)

현재 사용 중인 객체 수를 분석합니다. GC 이후에도 유지되는 객체를 식별하여 메모리 누수 가능성을 진단할 수 있습니다. 시간이 지남에 따라 사용 중 객체 수가 지속적으로 증가하면 메모리 누수를 의심해볼 수 있습니다.
할당 크기 (Alloc Space)

누적 할당된 메모리 크기를 분석합니다. 메모리를 많이 소비하는 함수를 식별하여 대용량 메 모리 할당이 발생하는 코드 경로를 최적화할 수 있습니다.
사용 중 크기 (Inuse Space)

현재 사용 중인 메모리 크기를 분석합니다. 실시간 메모리 점유 현황을 파악하고, 어떤 함수가 현재 가장 많은 메모리를 점유하고 있는지 확인할 수 있습니다.
팁: 메모리 누수를 진단할 때는 사용 중 객체와 사용 중 크기를 함께 확인하세요. 객체 수는 적지만 크기가 큰 경우 대형 객체 할당이, 객체 수가 많지만 크기가 작은 경우 소형 객체의 과도한 할당이 원인일 수 있습니다.
프로파일링 활용 시나리오
CPU 사용률이 높은 함수 찾기:
- 프로파일 타입에서 CPU를 선택합니다.
- CPU 사용률이 높았던 시간 구간을 차트에서 드래그하여 선택합니다.
- 플레임 그래프에서 가장 넓은 막대를 가진 함수를 확인합니다.
- 해당 함수를 클릭하여 하위 호출 스택에서 실제 병목 지점을 파악합니다.
메모리 누수 의심 구간 분석:
- 프로파일 타입에서 Heap을 선택합니다.
- Go 애플리케이션의 경우 사용 중 객체 또는 사용 중 크기 타입을 선택하여 현재 점유 중인 메모리를 확인합니다.
- 이전 기간 비교 모드를 활용하여 메모리 할당이 급증한 함수를 식별합니다.
- 특정 인스턴스를 선택하여 인스턴스별 메모리 할당 패턴을 비교합니다.
팁: 프로파일 데이터를 수집하려면 애플리케이션에 프로파일링 에이전트가 설정되어 있어야 합니다. 설정 방법은 프로파일링 설정 문서를 참고하세요.