Profiling¶
Profiling은 애플리케이션의 CPU, 메모리, I/O 등 실행 상태를 지속적으로 샘플링하고 데이터를 수집하여 성능 프로파일링 데이터를 자동으로 획득합니다. 수집된 데이터는 플레임 그래프를 통해 실시간으로 시각화되어 각 메서드, 클래스, 스레드 간의 호출 스택 관계와 리소스 소비 비율을 명확하게 보여줍니다. 이를 통해 개발자는 핫스팟 함수와 효율성 병목을 식별하고 코드 수준의 성능 최적화를 위한 데이터 기반을 제공합니다.
Profiling 탐색기에서는 다음을 수행할 수 있습니다.
- 플레임 그래프를 기반으로 Java, Python, Go, C/C++ 등 다양한 언어로 작성된 애플리케이션의 런타임 동적 성능 데이터를 분석하여 비효율적인 알고리즘, 메모리 누수 또는 부적절한 I/O 작업으로 인한 성능 문제를 직관적으로 파악할 수 있습니다.
- Trace와 연계하여 특정 비즈니스 요청(Span)에 해당하는 코드 실행 조각을 확인함으로써 비즈니스 인터페이스에서 구체적인 메서드까지의 종단 간 성능 추적을 가능하게 하고 최적화 방향을 정확히 파악할 수 있습니다.
전제 조건¶
Profiling 데이터가 업로드되면 탐색기를 통해 검색 및 분석할 수 있으며, 검색 필터, 빠른 필터, 열 사용자 지정, 데이터 내보내기 등의 작업을 지원합니다.
참고
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하여 메서드 상세 정보를 복사할 수 있습니다.
- 클릭 선택: 차원 목록은 기본적으로 모든 메서드를 표시합니다. 메서드를 클릭하면 플레임 그래프가 해당 메서드의 호출 경로에 집중하여 표시합니다. 여러 메서드를 선택하여 실행 상황을 비교할 수 있습니다. 선택한 메서드를 다시 클릭하면 선택이 해제되고 전체 뷰로 복원됩니다.
실행 정보¶
실행 정보 탭 페이지에서 해당 프로그래밍 언어 런타임의 관련 필드 및 태그 속성(프로세스 매개변수, 환경 변수, 시스템 태그 등)을 확인할 수 있습니다. 태그를 필터 조건으로 탐색기 목록 패널에 추가하여 관련 데이터를 빠르게 필터링할 수 있습니다. 또한 태그 내용을 복사하여 로그 또는 Trace에서 연관 조회에 사용할 수 있습니다.
Trace와 Profiling 연계¶
애플리케이션에서 APM 분산 추적과 Profiling 수집이 동시에 활성화된 경우, 시스템은 Trace 수준에서 성능 프로파일링 데이터를 연계하는 것을 지원합니다. 애플리케이션 성능 모니터링(APM)의 Trace 상세 페이지에서 플레임 그래프의 Span을 선택하면 해당 비즈니스 요청 실행 시간 동안 관련된 코드 메서드 호출 목록과 Wall Time 소요 비율을 확인할 수 있습니다.
이를 통해 느린 비즈니스 요청에서부터 직접 구체적인 시간 소요 메서드를 찾아내는 관통 분석이 가능하며, 한 번의 클릭으로 전체 Profiling 상세 페이지로 이동하여 해당 시간 범위의 더 포괄적인 성능 프로파일링 데이터(예: CPU, 메모리 차원)를 확인하고 심층적인 근본 원인 조사를 수행할 수 있습니다.
Profiling 상세 보기를 클릭하면 해당 Profiling 상세 페이지로 이동하여 구체적인 성능 데이터를 확인할 수 있습니다.

