JProfiler 도움말

자동 튜닝 및 무시된 메서드

메서드 호출 녹화 유형이 인스트루멘테이션으로 설정된 경우 프로파일된 클래스의 모든 메서드가 인스트루멘테이션됩니다. 이는 실행 시간이 매우 짧은 메서드에 상당한 오버헤드를 발생시킵니다. 이러한 메서드가 매우 빈번하게 호출되면 해당 메서드의 측정된 시간이 지나치게 길어집니다. 또한 인스트루멘테이션으로 인해 핫스팟 컴파일러가 이를 최적화하지 못할 수도 있습니다. 극단적인 경우, 인스트루멘테이션되지 않은 실행에서는 그렇지 않음에도 불구하고 이러한 메서드가 주된 핫스팟이 되기도 합니다. 다음 문자를 읽는 XML 파서의 메서드가 대표적인 예입니다. 이러한 메서드는 매우 빠르게 반환되지만 짧은 시간 동안 수백만 번 호출될 수 있습니다.

메서드 호출 녹화 유형이 샘플링으로 설정된 경우에는 이러한 문제가 발생하지 않습니다. 그러나 샘플링은 호출 횟수를 제공하지 않고 실행 시간이 더 긴 메서드 호출만 표시하며, 샘플링을 사용할 경우 여러 뷰에서 모든 기능을 완전하게 제공하지는 못합니다.

인스트루멘테이션 문제를 완화하기 위해 JProfiler에는 자동 튜닝이라는 메커니즘이 있습니다. 프로파일링 에이전트는 주기적으로 인스트루멘테이션 오버헤드가 높은 메서드를 확인하여 JProfiler GUI로 전송합니다. 상태 표시줄에 오버헤드 핫스팟이 있음을 알리는 항목이 표시됩니다.

해당 상태 표시줄 항목을 클릭하여 감지된 오버헤드 핫스팟을 검토하고 이를 무시된 메서드 목록에 추가하도록 선택할 수 있습니다. 이렇게 무시된 메서드는 이후 인스트루멘테이션되지 않습니다. 세션이 종료될 때도 동일한 대화상자가 표시됩니다.

새 프로파일링 설정을 적용한 후에는 모든 무시된 메서드가 호출 트리에서 제외됩니다. 해당 메서드의 실행 시간은 호출한 메서드의 자체 시간에 추가됩니다. 나중에 프로파일링 뷰에서 무시된 특정 메서드가 필수적이라고 판단되면 세션 설정의 무시된 메서드 탭에서 이를 제거할 수 있습니다.

무시된 메서드의 기본 구성에는 동적 메서드 디스패치에 사용되지만 실제 호출 체인을 추적하기 어렵게 만드는 Groovy의 호출 사이트 클래스가 포함되어 있습니다.

무시된 메서드를 수동으로 추가하려면 세션 설정에서 추가할 수 있지만, 호출 트리에서 메서드를 선택하고 컨텍스트 메뉴에서 메서드 무시 액션을 실행하는 것이 훨씬 더 간편합니다.

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

자동 튜닝에 관한 메시지를 보지 않으려는 경우 프로파일링 설정에서 이를 비활성화할 수 있습니다. 또한 오버헤드 핫스팟을 판단하는 기준을 구성할 수도 있습니다. 다음 두 가지 조건이 모두 충족되면 해당 메서드는 오버헤드 핫스팟으로 간주됩니다.

  • 해당 메서드의 모든 호출 총 시간이 스레드 전체 총 시간 대비 퍼밀(‰) 단위 임계값을 초과함
  • 평균 실행 시간이 마이크로초 단위의 절대 임계값보다 낮음