JProfiler 도움말

자동 튜닝 및 무시된 메소드

메서드 호출 녹화 유형이 instrumentation으로 설정된 경우, 프로파일된 클래스의 모든 메서드가 instrument됩니다. 이로 인해 실행 시간이 매우 짧은 메서드에 상당한 오버헤드가 발생할 수 있습니다. 이러한 메서드가 매우 자주 호출되면, 해당 메서드의 측정된 시간이 실제보다 훨씬 높게 나타날 수 있습니다. 또한 instrumentation으로 인해 hot spot 컴파일러가 해당 메서드를 최적화하지 못할 수도 있습니다. 극단적인 경우, 이러한 메서드가 주요 hot spot이 되기도 하지만, instrument되지 않은 실행에서는 그렇지 않습니다. 예를 들어, XML 파서에서 다음 문자를 읽는 메서드가 이에 해당합니다. 이런 메서드는 매우 빠르게 반환되지만, 짧은 시간 동안 수백만 번 호출될 수 있습니다.

메서드 호출 녹화 유형이 sampling으로 설정된 경우에는 이러한 문제가 발생하지 않습니다. 하지만 sampling은 호출 횟수를 제공하지 않고, 긴 메서드 호출만 보여주며, 일부 뷰에서는 sampling 사용 시 전체 기능을 사용할 수 없습니다.

instrumentation 문제를 완화하기 위해 JProfiler는 auto-tuning이라는 메커니즘을 제공합니다. 프로파일링 에이전트가 주기적으로 instrumentation 오버헤드가 높은 메서드를 확인하여 JProfiler GUI로 전송합니다. 상태 표시줄에는 오버헤드 hot spot이 감지되었음을 알리는 항목이 표시됩니다.

해당 상태 표시줄 항목을 클릭하면 감지된 오버헤드 hot spot을 검토하고, 무시된 메소드 목록에 추가할지 선택할 수 있습니다. 무시된 메소드로 지정된 메서드는 instrument되지 않습니다. 세션이 종료될 때에도 동일한 대화 상자가 표시됩니다.

새로운 프로파일링 설정을 적용하면, 모든 무시된 메소드는 호출 트리에서 보이지 않게 됩니다. 이들의 실행 시간은 호출한 메서드의 자체 시간(self-time)에 합산됩니다. 이후에 무시된 메소드 중 일부가 프로파일링 뷰에서 꼭 필요하다고 판단되면, 세션 설정의 Ignored Methods 탭에서 해당 메소드를 제거할 수 있습니다.

무시된 메소드의 기본 구성에는 Groovy의 동적 메서드 디스패치에 사용되는 call-site 클래스가 포함되어 있습니다. 이 클래스들은 실제 호출 체인을 따라가기가 어렵게 만듭니다.

무시된 메소드를 수동으로 추가하고 싶다면 세션 설정에서 직접 추가할 수 있지만, 호출 트리에서 메서드를 선택한 후 컨텍스트 메뉴에서 Ignore Method 액션을 실행하는 것이 훨씬 쉽습니다.

필터 설정에서는 필터 항목의 유형을 "Ignored"로 설정하여 전체 클래스나 패키지를 무시할 수도 있습니다. 선택 항목에서 필터 추가 메뉴에는 선택한 노드에 따라 클래스 또는 최상위 패키지까지 무시하도록 제안하는 액션이 포함되어 있습니다. 선택한 노드가 compact-profiled인지 profiled인지에 따라 필터를 반대 유형으로 변경하는 액션도 볼 수 있습니다.

auto-tuning에 대한 메시지를 보고 싶지 않다면, 프로파일링 설정에서 해당 기능을 비활성화할 수 있습니다. 또한 오버헤드 hot spot을 판단하는 기준도 설정할 수 있습니다. 메서드가 오버헤드 hot spot으로 간주되려면 다음 두 조건을 모두 만족해야 합니다:

  • 스레드 전체 총 시간 대비 퍼밀 단위 임계값 초과
    모든 호출의 총 시간이 스레드 전체 총 시간의 퍼밀(per mille) 단위 임계값을 초과할 때
  • 평균 시간이 마이크로초 단위 절대 임계값 미만
    평균 시간이 마이크로초 단위의 절대 임계값보다 낮을 때