Profiling¶
Profiling은 애플리케이션의 CPU, 메모리, I/O 등의 실행 상태를 지속적으로 샘플링하고 데이터를 수집하여 성능 프로파일링 데이터를 자동으로 획득합니다. 수집된 데이터는 플레임 그래프로 실시간 시각화되어 각 메서드, 클래스, 스레드 간의 호출 스택 관계와 리소스 소비 비중을 명확하게 보여주며, 개발자가 핫 함수와 효율성 병목을 식별하고 코드 수준 성능 최적화를 위한 데이터 기반을 제공합니다.
Profiling 탐색기에서 다음을 수행할 수 있습니다.
- 플레임 그래프를 기반으로 Java, Python, Go, C/C++ 등 다양한 언어 애플리케이션의 런타임 동적 성능 데이터를 분석하여 비효율적인 알고리즘, 메모리 누수 또는 부적절한 I/O 작업으로 인한 성능 문제를 직관적으로 파악할 수 있습니다.
- 트레이스(Trace)와 연계하여 특정 비즈니스 요청(Span)에 대응하는 코드 실행 구간을 확보하고, 비즈니스 인터페이스에서 특정 메서드까지의 엔드투엔드 성능 추적을 통해 최적화 방향을 정밀하게 파악할 수 있습니다.
전제 조건¶
Profiling 데이터를 전송한 후 탐색기에서 조회 및 분석할 수 있으며, 검색 필터, 빠른 필터, 열 사용자 지정, 데이터 내보내기 등의 작업을 지원합니다.
상단의 "워크스페이스" 선택기를 통해 동일한 사이트 내에서 권한이 부여된 여러 워크스페이스의 Profile 데이터를 조회할 수 있습니다. 특정 레코드, Profile 파일 및 플레임 그래프를 열 때는 해당 레코드의 원본 워크스페이스가 사용됩니다. 권한 부여 조건 및 제한 사항은 워크스페이스 간 조회 설명을 참조하세요.
주의
Profiling 데이터는 기본적으로 7일간 저장됩니다.
Profiling 상세 페이지¶
세션 리플레이의 연관 상세 정보에서 이 페이지로 진입한 경우, 이전 단계로 돌아가 분석을 계속할 수 있습니다.
성능¶
상세 페이지에서 자동으로 "성능" 탭으로 진입하며, 속성 태그, 성능 플레임 그래프 및 실행 정보가 포함됩니다.
현재 Profile 파일 크기가 20MB를 초과하면 시스템에서 온라인 분석을 지원하지 않습니다. 파일을 로컬에 다운로드하여 전문 분석 도구로 확인할 수 있습니다. 예:
플레임 그래프¶
Profiling의 핵심은 플레임 그래프를 통한 코드 수준 성능 분석입니다. 플레임 그래프는 호출 스택 내 각 메서드의 실행 시간 또는 리소스 소비 분포를 직관적으로 보여줍니다. 또한 메서드, 클래스 라이브러리, 스레드 등 여러 차원의 집계 데이터 분석 뷰를 제공하여 실행 비중이 가장 높은 핫 메서드를 직접 나열함으로써 핵심 성능 문제에 빠르게 집중할 수 있도록 지원합니다.
분석 기능은 여러 프로그래밍 언어를 지원하며, 언어별로 관측 가능한 지표 차원이 다릅니다. 예:
| 분류 | 설명 |
|---|---|
| CPU Time | 각 메서드의 CPU 실행 시간 |
| Wall Time | 각 메서드의 총 소요 시간으로, CPU 실행 시간, I/O 대기 시간 및 함수 실행 중 발생하는 기타 모든 작업에 소요된 시간을 포함 |
| Heap Live Size | 아직 사용 중인 힙 메모리 양 |
| Allocated Memory | 각 메서드에서 할당한 힙 메모리 양(이후 해제된 할당 포함) |
| Allocations | 각 메서드에서 수행한 힙 할당 횟수(이후 해제된 할당 포함) |
| Thrown Exceptions | 각 메서드에서 발생시킨 예외 수 |
| Lock Wait Time | 각 함수가 락을 기다리는 데 소요된 시간 |
| Locked Time | 각 함수가 락을 유지하는 데 소요된 시간 |
| Lock Acquires | 각 메서드가 락을 획득한 횟수 |
| Lock Releases | 각 메서드가 락을 해제한 횟수 |
| 분류 | 설명 |
|---|---|
| CPU Time | 각 메서드의 CPU 실행 시간으로, Java 바이트코드 및 런타임 작업 시간을 포함하며 JVM을 통한 네이티브 코드 호출 시간은 포함하지 않음 |
| Wall Time in Native Code | 네이티브 코드의 샘플링 횟수. 코드가 CPU에서 실행되거나 I/O를 대기하는 동안 및 메서드 실행 중 발생하는 모든 상황에서 샘플링이 발생할 수 있음. 애플리케이션 코드 실행과 관련된 Java 바이트코드 호출은 포함하지 않음 |
| Allocations | 각 메서드에서 수행한 힙 할당 횟수(이후 해제된 할당 포함) |
| Allocated Memory | 각 메서드에서 할당한 힙 메모리 양(이후 해제된 할당 포함) |
| Heap Live Objects | 각 메서드에 할당된 활성 객체 수 |
| Thrown Exceptions | 각 메서드에서 발생시킨 예외 수 |
| Lock Wait Time | 각 메서드가 락을 기다리는 데 소요된 시간 |
| Lock Acquires | 각 메서드가 락을 획득한 횟수 |
| File I/O Time | 각 메서드가 파일 읽기 및 쓰기에 소요한 시간 |
| File I/O Written | 각 메서드가 파일에 쓴 데이터 양 통계 |
| File I/O Read | 각 메서드가 파일에서 읽은 데이터 양 통계 |
| Socket I/O Read Time | 각 메서드가 소켓에서 읽는 데 소요한 시간 |
| Socket I/O Write Time | 각 메서드가 소켓에 쓰는 데 소요한 시간 |
| Socket I/O Read | 각 메서드가 소켓에서 읽은 데이터 양 통계 |
| Socket I/O Written | 각 메서드가 소켓에 쓴 데이터 양 통계 |
| Synchronization | 각 메서드가 동기화에 소요한 시간 |
빠른 작업¶
- 검색: 유형 선택 상자에 메서드 이름 키워드를 입력하여 퍼지 검색을 수행하고, 일치 결과에서 직접 선택하면 특정 메서드를 빠르게 찾아 집중적으로 확인할 수 있습니다.
- 복사: 차원에서 hover하면 메서드 상세 정보를 복사하여 확인할 수 있습니다.
- 클릭 선택: 차원 목록은 기본적으로 전체 메서드를 표시합니다. 아무 메서드나 클릭하면 플레임 그래프가 해당 메서드의 호출 경로를 중심으로 표시됩니다. 여러 메서드를 선택하여 실행 상태를 비교할 수 있습니다. 선택한 메서드를 다시 클릭하면 선택이 해제되고 전체 뷰로 복원됩니다.
실행 정보¶
실행 정보 탭에서 해당 프로그래밍 언어 런타임의 연관 필드 및 태그 속성을 확인할 수 있습니다. 여기에는 프로세스 매개변수, 환경 변수, 시스템 태그 등의 필드가 포함됩니다. 아무 태그나 필터 조건으로 선택하여 탐색기 목록 패널에 추가하고 관련 데이터를 빠르게 필터링할 수 있으며, 태그 내용을 직접 복사하여 로그 또는 트레이스에서 연관 조회에 사용할 수도 있습니다.
트레이스 연계 Profiling¶
애플리케이션에서 APM 분산 추적과 Profiling 수집을 동시에 활성화하면 시스템이 트레이스(Trace) 수준에서 성능 프로파일링 데이터를 연계할 수 있도록 지원합니다. 애플리케이션 성능 모니터링(APM)의 트레이스 상세 페이지에서 플레임 그래프의 아무 Span이나 선택하면 해당 비즈니스 요청 실행 시간 구간의 연계된 코드 메서드 호출 목록과 Wall Time 소요 시간 비중을 확인할 수 있습니다.
이를 통해 느린 비즈니스 요청 하나에서 특정 지연 메서드로 직접 이동하는 관통형 분석이 가능하며, 원클릭으로 전체 Profiling 상세 페이지로 이동하여 해당 시간 구간의 더 포괄적인 성능 프로파일링 데이터(예: CPU, 메모리 차원)를 확인하고 심층적인 근본 원인 조사를 수행할 수 있습니다.
Profiling 상세 보기를 클릭하면 해당 Profiling 상세 페이지로 이동하여 구체적인 성능 데이터를 확인할 수 있습니다.

