JProfiler 도움말Download

콜 트레이서


호출 트리에서 메서드 호출 녹화는 동일한 호출 스택을 가진 호출을 누적합니다. 메모리 요구 사항이 방대하고 기록된 데이터의 양이 많아 해석이 어렵기 때문에 정확한 시간 순서 정보를 유지하는 것은 일반적으로 실현 가능하지 않습니다.

그러나 제한된 상황에서는 호출을 추적하고 전체 시간 순서를 유지하는 것이 의미가 있습니다. 예를 들어, 여러 협력 스레드의 메서드 호출의 정확한 교차를 분석하고자 할 수 있습니다. 디버거는 이러한 사용 사례를 단계별로 진행할 수 없습니다. 또는 일련의 메서드 호출을 분석하고 싶지만 디버거에서처럼 한 번만 보는 것이 아니라 앞뒤로 이동할 수 있기를 원할 수 있습니다. JProfiler는 콜 트레이서를 통해 이 기능을 제공합니다.

콜 트레이서는 콜 트레이서 뷰에서, 트리거 또는 프로파일링 API로 활성화할 수 있는 별도의 녹화 작업을 가지고 있습니다. 과도한 메모리 소비 문제를 피하기 위해 수집된 호출 추적의 최대 수에 제한이 설정됩니다. 그 제한은 뷰 설정에서 구성할 수 있습니다. 수집된 추적의 비율은 필터 설정에 크게 의존합니다.

호출 추적은 메서드 호출 녹화 유형이 계측으로 설정된 경우에만 작동합니다. 샘플링은 단일 메서드 호출을 추적하지 않으므로 샘플링으로 호출 추적을 수집하는 것은 기술적으로 불가능합니다. 콜 트리에서와 마찬가지로 콜 트레이서에서 압축 필터링된 클래스에 대한 호출이 기록됩니다. 자신의 클래스에만 집중하고 싶다면 뷰 설정에서 이러한 호출을 제외할 수 있습니다.

추적된 메서드 호출은 관련된 호출을 쉽게 건너뛸 수 있도록 세 가지 수준으로 나누어진 트리로 표시됩니다. 세 그룹은  스레드,  패키지 및  클래스입니다. 이 그룹 중 하나의 현재 값이 변경될 때마다 새로운 그룹화 노드가 생성됩니다.

가장 낮은 수준에서는  메서드 진입 및  메서드 종료 노드가 있습니다. 호출 추적 아래에는 현재 선택된 메서드 추적의 스택 추적이 표시됩니다. 현재 메서드에서 다른 메서드로의 호출 추적이 기록되었거나 다른 스레드가 현재 메서드를 중단한 경우, 해당 메서드의 진입 및 종료 노드는 인접하지 않을 것입니다. 이전 메서드다음 메서드 작업을 사용하여 메서드 수준에서만 탐색할 수 있습니다.

추적 및 모든 그룹화 노드에 표시되는 타이밍은 기본적으로 첫 번째 추적을 참조하지만 이전 노드 이후의 상대 시간을 표시하도록 변경할 수 있습니다. 이전 노드가 부모 노드인 경우, 그 차이는 0이 될 것입니다. 또한 동일한 유형의 이전 노드에 대한 상대 시간을 표시하는 옵션도 사용할 수 있습니다.

적절한 필터가 있어도 매우 짧은 시간에 많은 수의 추적이 수집될 수 있습니다. 관심 없는 추적을 제거하기 위해 콜 트레이서는 표시된 데이터를 빠르게 다듬을 수 있도록 합니다. 예를 들어, 특정 스레드는 관련이 없을 수 있으며 특정 패키지나 클래스의 추적은 흥미롭지 않을 수 있습니다. 또한, 재귀 메서드 호출은 많은 공간을 차지할 수 있으며 단일 메서드만 제거하고 싶을 수 있습니다.

노드를 선택하고 delete 키를 눌러 숨길 수 있습니다. 선택한 노드의 다른 모든 인스턴스와 관련된 모든 자식 노드도 숨겨질 것입니다. 뷰 상단에서 기록된 모든 추적 중 몇 개의 호출 추적이 여전히 표시되고 있는지 확인할 수 있습니다. 숨겨진 노드를 다시 표시하려면 숨겨진 항목 표시 도구 모음 버튼을 클릭할 수 있습니다.