프로파일링이 활성화되면 지원되는 Java 버전에 대해 다음 프로파일 유형이 수집됩니다:
- CPU
- 각 메서드가 CPU에서 실행되는 데 걸린 시간입니다. 여기에는 JVM에서 실행되는 코드 (예: Java, Kotlin)가 포함되지만 JVM 작업이나 JVM 내에서 호출되는 네이티브 코드는 포함되지 않습니다.
- Allocations
- 이후에 해제된 할당량을 포함해 각 메서드에서 수행한 힙 할당 수입니다.
- Allocated Memory
- 이후에 해제된 할당량을 포함하여 각 메서드에 의해 할당된 힙 메모리의 양입니다.
- Heap Live Objects
- 각 메서드가 힙 메모리에 할당한 개체 중 아직 가비지 수집으로 처리되지 않은 개체 수입니다. 이는 서비스의 전체 메모리 사용량을 조사하고 잠재적인 메모리 누수를 식별하는 데 유용합니다.
필요 사항: Java 11
최소 버전: 1.17.0 - Heap Live Size
- 각 메서드에 의해 할당된 힙 메모리 중 아직 가비지 수집으로 처리되지 않은 메모리의 양입니다. 이 기능은 서비스의 전체 메모리 사용량을 조사하고 잠재적인 메모리 누수를 식별하는 데 유용합니다.
필요 사항: Java 11
최소 버전: 1.17.0 - Wall Time in Native Code
- 네이티브 코드에서 소요된 경과 시간입니다. 경과 시간에는 CPU에서 코드가 실행 중이거나 I/O를 기다리는 시간 및 메서드가 실행되는 동안 발생하는 기타 모든 시간이 포함됩니다. 이 프로파일에는 일반적으로 애플리케이션 코드의 대부분을 차지하는 JVM 바이트코드를 실행하는 데 소요된 시간은 포함되지 않습니다.
- Class Load
- 각 메서드에 의해 로드된 클래스 수입니다.
- Thrown Exceptions
- 각 메서드에서 발생한 오류 및 예외의 수와 그 유형입니다.
- File I/O
- 각 메서드가 파일을 읽고 쓰는 데 걸린 시간입니다.
- Lock
- 각 메서드가 잠금을 대기하는 데 걸린 시간입니다.
- Socket I/O
- 각 메서드가 소켓 I/O를 읽고 쓰는 데 걸린 시간입니다.
프로파일링이 실행되면 Python 버전에 따라 다음 프로파일 유형이 수집됩니다:
- Wall Time
- 각 함수가 사용한 경과 시간입니다. 경과 시간에는 CPU에서 코드가 실행 중이거나 I/O를 기다리는 시간 및 함수가 실행되는 동안 발생하는 기타 모든 시간이 포함됩니다.
필요 사항: Python 2.7+ - Lock Wait Time
- 각 함수가 잠금을 대기하는 데 걸린 시간입니다.
필요 사항: Python 2.7+ - Locked Time
- 각 함수가 잠금을 유지하는 데 걸린 시간입니다.
필요 사항: Python 2.7+ - Lock Acquires
- 각 함수가 잠금을 획득한 횟수입니다.
필요 사항: Python 2.7+ - Lock Releases
- 각 함수가 잠금을 해제한 횟수입니다.
필요 사항: Python 2.7+ - CPU
- Python 및 네이티브 코드를 포함하여 각 함수가 CPU에서 실행되는 데 걸린 시간입니다.
필요 사항: Python 2.7+, POSIX 플랫폼 - Heap Live Size
- 각 함수에 의해 할당된 힙 메모리 중 아직 가비지 수집으로 처리되지 않은 메모리 양입니다. 이 기능은 서비스의 전체 메모리 사용량을 조사하고 잠재적인 메모리 누수를 식별하는 데 유용합니다.
필요 사항: Python 3.5+ - Allocated Memory
- 이후에 해제된 할당량을 포함하여 각 함수에 의해 할당된 힙 메모리의 양입니다.
필요 사항: Python 3.5+ - Allocations
- 이후에 해제된 할당량을 포함하여 각 함수에서 수행한 힙 할당 수입니다.
필요 사항: Python 3.5+ - Thrown Exceptions
- 각 함수에 의해 제기된 탐지되거나 탐지되지 않은 예외의 수와 그 유형입니다.
필요 사항: Python 3.7+, POSIX 플랫폼
프로파일링을 실행하면 지원되는 Go 버전에 대해 다음 프로파일 유형이 수집됩니다:
- CPU Time
- CPU에서 각 함수가 실행되는 데 소요된 시간입니다. 네트워킹, 채널, 뮤텍스 및 절전 대기와 같은 Off-CPU 시간은 이 프로파일에 캡처되지 않습니다. 뮤텍스 및 블록 프로파일을 확인하세요.
- Allocations
- 프로파일링 기간(기본값: 60초) 동안 힙 메모리에서 각 함수에 의해 할당된 개체 수이며 이후에 해제된 할당량도 포함됩니다. Go는
alloc_objects
를 호출하며, 스택 할당량은 추적되지 않습니다. 이는 가비지 수집 부하를 조사하는 데 유용합니다. 이 측정값이 Delta 프로파일 1.33.0
버전에서 어떻게 변경되는지에 대해 참고 사항을 확인하세요. - Allocated Memory
- 프로파일링 기간(기본값: 60초) 동안 각 함수에서 할당한 힙 메모리 양입니다. 여기에는 나중에 해제된 할당량도 포함됩니다. Go는
alloc_space
를 호출하며, 스택 할당량은 추적되지 않습니다. 이는 가비지 수집 부하를 조사하는 데 유용합니다. 이 측정값이 Delta 프로파일 1.33.0
버전에서 어떻게 변경되는지에 대해 참고 사항을 확인하세요. - Heap Live Objects
- 힙 메모리에서 각 함수에 의해 할당된 개체 중 아직 가비지 수집으로 처리되지 않은 개체 수입니다. Go는
inuse_objects
를 호출합니다. 이 기능은 서비스의 전체 메모리 사용량을 조사하고 잠재적인 메모리 누수를 식별하는 데 유용합니다. - Heap Live Size
- 각 함수에 의해 할당된 힙 메모리 중 아직 가비지 수집으로 처리되지 않은 메모리 양입니다.Go는
inuse_space
를 호출합니다. 이 기능은 서비스의 전체 메모리 사용량을 조사하고 잠재적인 메모리 누수를 식별하는 데 유용합니다. - Mutex
- 프로파일링 기간(기본값: 60초) 동안 뮤텍스에서 시간 함수가 대기하고 있습니다. 이 프로파일의 스택 트레이스(stack trace)는 뮤텍스에서 차단된 다른 goroutine이 계속 진행되도록 허용한
Unlock()
작업을 가리킵니다. 스핀락을 사용하는 짧은 뮤텍스 경합은 이 프로파일에서는 캡처되지 않지만 CPU 프로파일에서는 볼 수 있습니다. 또한 Delta 프로파일 1.33.0
버전에서 이 측정값이 어떻게 변경되는지에 대해 참고 사항을 확인하세요. - Block
- 프로파일링 기간(기본값: 60초) 동안 뮤텍스 및 채널 작업에서 시간 함수가 대기하고 있습니다. 절전, GC, 네트워크 및 Syscall 작업은 이 프로파일에 캡처되지 않습니다. 차단 작업은 차단이 해제된 후에만 캡처되므로 이 프로파일은 중단된 것으로 보이는 애플리케이션을 디버깅하는 데 사용할 수 없습니다. 뮤텍스 경합의 경우 이 프로파일의 스택 트레이스(stack trace)는 차단된
Lock()
작업을 가리킵니다. 이렇게 하면 프로그램이 차단되는 위치를 알 수 있고, 뮤텍스 프로파일은 프로그램의 어떤 부분이 경합을 유발하는지 알 수 있습니다. 자세한 내용은 Datadog의 Go에서 블록 프로파일링 연구 자료를 참조하세요. 또한 Delta 프로파일 1.33.0
버전에서 이 측정값이 어떻게 변경되는지에 대해 참고 사항을 확인하세요. 참고: 블록 프로파일러는 프로덕션 워크로드에 상당한 오버헤드를 초래할 수 있습니다. 프로덕션에서 사용하는 경우 가급적 높은 속도 (예: 100 밀리초인 100000000
)를 사용하고, 지연 시간이나 CPU 사용률 증가의 징후가 있는지 확인하세요. - Goroutines
- 현재 동일한 함수 (on-CPU 및 대기 중인 off-CPU)를 실행 중인 goroutines 수의 스냅 샷입니다. 스냅샨 간의 goroutines 증가는 프로그램에서 goroutines가 누출되었음을 나타냅니다. 대부분의 정상적인 애플리케이션에서 이 프로파일은 작업자 풀과 goroutines 사용 수에 의해 지배됩니다. 지연의 영향을 받기 쉽고 대량의 goroutines (10.000개 이상)을 사용하는 애플리케이션에서 이 프로파일을 사용하려면 stop-the-world 일시 중지가 필요합니다. 일시 중지는 모든 프로파일링 기간 (기본값 60초) 동안에 한 번만 발생하며, 일반적으로 goroutine 당 약
1μsec
동안 지속됩니다. p99 지연 시간 SLO가 약 100ms
인 애플리케이션은 일반적으로 이 경고를 무시할 수 있습니다. 자세한 내용은 Datadog의 Go에서의 Goroutine 프로파일링 연구 자료를 참조하세요.
델타 프로파일
참고: Go 프로파일러
1.33.0
이전 버전에서는
프로파일링 기간 동안이 아닌
프로세스가 시작된 이후 누적된 측정값으로 Allocations, Allocated Memory, Mutex, 및 Block 메트릭이 표시됩니다. 변경된 버전
1.33.0
의 델타 프로파일에서는 누적되지 않고 변하는 값을 확인할 수 있습니다. 델타 프로파일링은 기본적으로 설정되어 있습니다. 프로파일러 버전
1.35.0
을 사용하면
WithDeltaProfiles
옵션을 사용하여 델타 프로파일을 사용하지 않도록 설정할 수 있습니다.
프로파일러 버전
1.37.0
부터는 업로드 대역폭 사용량을 줄이기 위해 델타 프로파일링 사용 시 누적된 프로파일이 더 이상 업로드되지 않습니다. 누적된 전체 프로파일이 반드시 필요한 경우
지원팀에 문의하시기 바랍니다.
프로파일링을 실행하면 지원되는 Ruby 버전에 대해 다음 프로파일 유형이 수집됩니다:
- CPU
- Ruby 및 네이티브 코드를 포함하여 각 함수가 CPU에서 실행되는 데 소요된 시간입니다.
- Wall Time
- 각 함수가 사용한 경과 시간입니다. 경과 시간에는 CPU에서 코드가 실행 중이거나 I/O를 기다리는 시간 및 함수가 실행되는 동안 발생하는 기타 모든 시간이 포함됩니다.
프로파일링을 실행하면 지원되는 Node.js 버전에 대해 다음 프로파일 유형이 수집됩니다:
- 벽 시간
- 각 기능/함수가 사용한 경과 시간입니다. 경과 시간에는 CPU에서 코드가 실행 중이거나 I/O를 기다리는 시간 및 기능/함수가 실행되는 동안 발생하는 기타 모든 시간이 포함됩니다.
- Heap Live Size
- 가각 함수에 의해 할당된 힙 메모리의 양 중 가비지 수집으로 처리되지 않은 메모리 양입니다. 이 함수는 서비스의 전체 메모리 사용량을 조사하고 잠재적인 메모리 누수를 식별하는 데 유용합니다.
프로파일링을 실행하면 지원되는 .NET 버전에 대해 다음 프로파일 유형이 수집됩니다:
- Wall Time
- 관리되는 메서드에서 소요된 경과 시간입니다. 경과 시간에는 CPU에서 코드가 실행 중이거나 I/O를 기다리는 시간 및 메서드가 실행되는 동안 발생하는 기타 모든 시간이 포함됩니다.
- CPU(v2.15+)
- 각 메서드가 CPU에서 실행되는 데 걸린 시간입니다.
- Thrown Exceptions (v2.31+)
- 각 메서드에 의해 제기된 탐지되거나 탐지되지 않은 예외의 수와 그 유형 및 메시지입니다.
- Allocations (beta, v2.18+)
- 각 메서드별로 할당된 개체의 수와 크기 및 개체 유형입니다.
필요 사항: .NET 6+ - Lock (v2.31+)
- 스레드가 잠금을 대기하는 횟수와 시간입니다.
필요 사항: .NET 5+ - Live Heap (beta, v2.22+)
- 할당된 개체 (클래스 이름 포함) 중 메모리에 남아 있는 하위 집합입니다.
필요 사항: .NET 7+
프로파일링이 활성화되면 지원되는 PHP 버전에 대해 다음 프로파일 유형이 수집됩니다:
- 벽 시간
- 각 기능/함수가 사용한 경과 시간입니다. 경과 시간에는 CPU에서 코드가 실행 중이거나 I/O를 기다리는 시간 및 기능/함수가 실행되는 동안 발생하는 기타 모든 시간이 포함됩니다.
- CPU
- 각 함수가 CPU에서 실행되는 데 소요된 시간을 표시합니다.
- Allocations (v0.88+)
- 프로파일링 기간 (기본값: 67초) 동안 각 함수별 할당 횟수 (이후 해제된 할당 포함)입니다. 스택 할당은 추적되지 않습니다.
참고: JIT가 활성화된 경우 사용할 수 없습니다. - Allocated memory (v0.88+)
- 프로파일링 기간(기본값: 67초) 동안 각 함수에 할당된 힙 메모리의 양(이후 해제된 할당량 포함)입니다. 스택 할당은 추적되지 않습니다.
참고: JIT가 활성화된 경우 사용할 수 없습니다.
프로파일링을 실행하면 지원되는 언어 및 버전에 대해 다음 프로파일 유형이 수집됩니다:
- CPU
- 각 함수가 CPU에서 실행되는 데 소요된 시간입니다.
- Allocations
- 프로파일링 기간 (기본값: 59초) 동안 각 함수별 할당 수이며, 이후에 해제된 할당량도 포함합니다. 스택 할당량이 추적되지 않습니다.
- Allocated memory
- 프로파일링 기간 (기본값: 59초) 동안 각 함수에 의해 할당된 힙 메모리의 양이며, 이후에 해제된 할당량도 포함됩니다. 스택 할당량이 추적되지 않습니다.