자동 튜닝 및 무시된 메소드
메서드 호출 녹화 유형이 계측으로 설정된 경우, 프로파일된 클래스의 모든 메서드가 계측됩니다. 이는 실행 시간이 매우 짧은 메서드에 대해 상당한 오버헤드를 발생시킵니다. 이러한 메서드가 매우 자주 호출되면, 해당 메서드의 측정된 시간이 너무 높게 나타날 것입니다. 또한, 계측으로 인해 핫스팟 컴파일러가 최적화를 방해할 수 있습니다. 극단적인 경우, 이러한 메서드는 계측되지 않은 실행에서는 사실이 아님에도 불구하고 지배적인 핫스팟이 됩니다. 예를 들어, XML 파서의 다음 문자를 읽는 메서드가 있습니다. 이러한 메서드는 매우 빠르게 반환되지만, 짧은 시간 내에 수백만 번 호출될 수 있습니다.
메서드 호출 녹화 유형이 샘플링으로 설정된 경우에는 이 문제가 발생하지 않습니다. 그러나 샘플링은 호출 횟수를 제공하지 않으며, 더 긴 메서드 호출만 표시하고, 샘플링이 사용될 때 여러 뷰가 완전한 기능을 갖지 못합니다.
계측 문제를 완화하기 위해 JProfiler에는 자동 튜닝이라는 메커니즘이 있습니다. 프로파일링 에이전트는 주기적으로 높은 계측 오버헤드를 가진 메서드를 확인하고 이를 JProfiler GUI로 전송합니다. 상태 표시줄에는 오버헤드 핫스팟의 존재를 알리는 항목이 표시됩니다.
상태 표시줄 항목을 클릭하여 감지된 오버헤드 핫스팟을 검토하고 무시된 메소드 목록에 추가할 수 있습니다. 이러한 무시된 메소드는 계측되지 않습니다. 세션이 종료되면 동일한 대화 상자가 표시됩니다.
새로운 프로파일링 설정을 적용한 후에는 모든 무시된 메소드가 호출 트리에서 누락됩니다. 그들의 실행 시간은 호출 메소드의 자체 시간에 추가됩니다. 나중에 프로파일링 뷰에서 일부 무시된 메소드가 필수적임을 발견하면, 세션 설정의 무시된 메소드 탭에서 제거할 수 있습니다.
무시된 메소드의 기본 구성에는 실제 호출 체인을 따르기 어렵게 만드는 Groovy의 동적 메소드 디스패치에 사용되는 호출 사이트 클래스가 포함되어 있습니다.
무시된 메소드를 수동으로 추가하려면 세션 설정에서 할 수 있지만, 훨씬 더 쉬운 방법은 호출 트리에서 메소드를 선택하고 컨텍스트 메뉴에서 메소드 무시 작업을 호출하는 것입니다.
필터 설정에서 필터 항목의 유형을 "무시됨"으로 설정하여 전체 클래스나 패키지를 무시할 수도 있습니다. 선택에서 필터 추가 메뉴에는 선택된 노드에 따라 클래스나 패키지를 최상위 패키지까지 무시하도록 제안하는 작업이 포함되어 있습니다. 선택된 노드가 압축 프로파일된 것인지 프로파일된 것인지에 따라 필터를 반대 유형으로 변경하는 작업도 볼 수 있습니다.
자동 튜닝에 대한 메시지를 보고 싶지 않은 경우, 프로파일링 설정에서 이를 비활성화할 수 있습니다. 또한, 오버헤드 핫스팟을 결정하는 기준을 구성할 수 있습니다. 메소드는 다음 두 가지 조건이 모두 충족되면 오버헤드 핫스팟으로 간주됩니다:
- 모든 호출의 총 시간이 스레드의 전체 총 시간의 퍼밀레 기준 임계값을 초과합니다
- 평균 시간이 마이크로초 단위의 절대 임계값보다 낮습니다