JProfiler 도움말

이상치 감지 및 예외적인 메소드 녹화

어떤 상황에서는 메서드의 평균 호출 시간이 문제가 아니라, 메서드가 가끔 비정상적으로 동작하는 것이 문제일 수 있습니다. 호출 트리에서는 모든 메서드 호출이 누적되므로, 10,000번의 호출 중 한 번 예상보다 100배 오래 걸리는 빈번하게 호출되는 메서드는 전체 시간에서 뚜렷한 흔적을 남기지 않습니다.

이 문제를 해결하기 위해 JProfiler는 호출 트리에서 이상치 감지 뷰와 예외적인 메소드 녹화 기능을 제공합니다.

이상치 감지 뷰

이상치 감지 뷰는 단일 호출에 대해 측정된 최대 시간과 함께 각 메서드의 호출 지속 시간 및 호출 횟수에 대한 정보를 표시합니다. 평균 시간 대비 최대 호출 시간의 편차는 모든 호출 지속 시간이 좁은 범위 내에 있는지, 아니면 유의미한 이상치가 있는지를 보여줍니다. 다음과 같이 계산되는 이상치 계수는

(최대 시간 - 평균 시간) / 평균 시간

이러한 측면에서 메서드를 정량화하는 데 도움이 될 수 있습니다. 기본적으로 테이블은 이상치 계수가 가장 높은 메서드가 상단에 오도록 정렬됩니다. 이상치 감지 뷰의 데이터는 CPU 데이터가 녹화된 경우에 표시됩니다.

호출 횟수가 몇 번에 불과한 메서드나 실행 시간이 극히 짧은 메서드로 인해 화면이 지나치게 복잡해지는 것을 방지하기 위해, 뷰 설정에서 최대 시간 및 호출 횟수에 대한 하한 임계값을 설정할 수 있습니다. 기본적으로 이상치 통계에는 최대 시간이 10ms를 초과하고 호출 횟수가 10회를 초과하는 메서드만 표시됩니다.

예외적인 메소드 녹화 설정

예외적인 호출 지속 시간으로 인해 문제가 발생하는 메서드를 식별했다면, 컨텍스트 메뉴에서 이를 예외적인 메소드로 추가할 수 있습니다. 동일한 컨텍스트 메뉴 액션은 호출 트리 뷰에서도 사용할 수 있습니다.

예외적인 메소드 녹화를 위해 메서드를 등록하면, 가장 느린 몇 개의 호출이 호출 트리에 별도로 유지됩니다. 다른 호출들은 평소처럼 단일 메서드 노드로 병합됩니다. 별도로 유지되는 호출 수는 프로파일링 설정에서 구성할 수 있습니다. 기본값은 5로 설정되어 있습니다.

느린 메서드 호출을 구분할 때 시간 측정을 위해 특정 스레드 상태를 사용해야 합니다. 이는 CPU 뷰의 스레드 상태 선택일 수 없는데, 이는 단지 표시 옵션일 뿐 녹화 옵션이 아니기 때문입니다. 기본적으로 월 클록 시간(wall clock time)이 사용되지만, 프로파일링 설정에서 다른 스레드 상태를 구성할 수 있습니다. 이상치 감지 뷰에도 동일한 스레드 상태가 사용됩니다.

세션 설정에서는 호출 트리나 이상치 감지 뷰의 컨텍스트 없이도 예외적인 메소드를 제거하거나 새로 추가할 수 있습니다. 또한 예외적인 메소드 구성에서는 예외적으로 오래 실행되는 이벤트가 주요 문제가 되는 AWT 및 JavaFX 이벤트 디스패치 메커니즘과 같은 잘 알려진 시스템에 대한 예외적인 메소드 정의를 추가하는 옵션을 제공합니다.

호출 트리의 예외적인 메소드

예외적 실행은 호출 트리 뷰에서 다르게 표시됩니다.

분할된 메서드 노드는 변경된 아이콘을 가지며 추가 텍스트를 표시합니다:

  •  [exceptional run]
    이러한 노드에는 예외적으로 느린 메서드 실행이 포함됩니다. 정의상 호출 횟수는 1입니다. 나중에 다른 많은 메서드 실행이 더 느려지는 경우, 별도로 녹화하도록 구성된 최대 메서드 실행 수에 따라 이 노드가 사라지고 "merged exceptional runs" 노드에 추가될 수 있습니다.
  •  [merged exceptional runs]
    예외적으로 느린 것으로 분류되지 않는 메서드 호출은 이 노드로 병합됩니다. 모든 호출 스택에 대해 예외적인 메소드당 이러한 노드는 하나만 존재할 수 있습니다.
  •  [current exceptional run]
    호출 트리 뷰가 JProfiler GUI로 전송되는 동안 호출이 진행 중이었다면 해당 호출이 예외적으로 느린지 여부를 아직 알 수 없습니다. "current exceptional run"은 현재 호출에 대해 별도로 유지 관리되는 트리를 표시합니다. 호출이 완료된 후에는 별도의 "exceptional run" 노드로 유지되거나 "merged exceptional runs" 노드로 병합됩니다.

프로브 및 분할 메서드에 의한 호출 트리 분할과 마찬가지로, 예외적인 메소드 노드에는 모든 호출을 즉석에서 병합 및 병합 해제할 수 있는 컨텍스트 메뉴의 Merge splitting level 액션이 있습니다.