JProfiler 도움말

스크립트 프로브

IDE에서 커스텀 프로브를 개발하려면 가로채기 지점과 프로브가 제공할 이점을 명확하게 이해해야 합니다. 반면 스크립트 프로브를 사용하면 API를 전혀 배우지 않고도 JProfiler GUI에서 직접 간단한 프로브를 빠르게 정의하고 실험해 볼 수 있습니다. 임베디드 또는 인젝티드 커스텀 프로브와 달리, 스크립트 프로브는 실행 중인 프로파일링 세션 도중에도 다시 정의할 수 있어 빠른 편집-컴파일-테스트 루프가 가능합니다.

스크립트 프로브 정의

스크립트 프로브는 가로챌 메서드를 선택하고 프로브의 페이로드 문자열을 반환하는 스크립트를 입력하여 정의합니다. 이러한 여러 메서드-스크립트 쌍을 단일 프로브에 번들로 묶을 수 있습니다.

스크립트 프로브 구성은 세션 설정에서 접근할 수 있습니다. 이곳은 스크립트 프로브를 생성 및 삭제할 수 있을 뿐만 아니라 다른 프로파일링 세션에서 가져올 수 있는 세트로 스크립트 프로브를 저장하는 공간이기도 합니다.

각 스크립트 프로브에는 이름과 선택적으로 설명이 필요합니다. 이름은 JProfiler의 뷰 선택기 중 "JVM & Custom Probes" 섹션에 프로브 뷰를 추가하는 데 사용됩니다. 설명은 프로브 뷰의 헤더에 표시되며 목적에 대한 간단한 설명이어야 합니다.

메서드를 선택할 때는 구성된 클래스패스에서 클래스를 선택하거나, 프로파일링 세션이 이미 실행 중인 경우 프로파일된 클래스에서 클래스를 선택하는 등 여러 가지 옵션이 있습니다. 두 번째 단계에서는 선택한 클래스에서 메서드를 선택할 수 있습니다.

가로챌 메서드를 훨씬 더 쉽게 선택하는 방법은 호출 트리 뷰에서 선택하는 것입니다. 컨텍스트 메뉴에서 Intercept Method With Script Probe 액션을 실행하면 새 프로브를 생성할지 아니면 기존 프로브에 가로채기를 추가할지 묻는 대화상자가 표시됩니다.

프로브 스크립트

스크립트 에디터에서는 가로챈 메서드의 모든 매개변수뿐만 아니라 메서드가 호출된 객체에도 접근할 수 있습니다. 가로챈 메서드의 반환값이나 발생한 예외에 접근해야 하는 경우에는 임베디드 또는 인젝티드 프로브를 작성해야 합니다.

이 환경에서 스크립트는 표현식 형태나 return 문이 포함된 일련의 문장 형태로 페이로드 문자열을 구성할 수 있습니다. 이러한 스크립트의 가장 단순한 형태는 단일 매개변수에 대해 parameter.toString()을 반환하거나 기본형(primitive type) 매개변수에 대해 String.valueOf(parameter)를 반환하는 것입니다. null을 반환하면 페이로드가 생성되지 않습니다.

CPU와 프로브 데이터를 동시에 기록하면 CPU 섹션의 호출 트리 뷰의 적절한 호출 스택에 프로브 뷰로 이동하는 링크가 표시됩니다. 또는 페이로드 문자열을 CPU 호출 트리 뷰 내에 인라인으로 표시하도록 선택할 수도 있습니다. 프로브 마법사의 "Payload interceptions->Call tree annotations" 단계에 이 옵션이 포함되어 있습니다.

스크립트에서 사용할 수 있는 또 다른 매개변수는 스크립트 컨텍스트입니다. 이는 com.jprofiler.api.agent.ScriptContext 타입의 객체로, 현재 프로브에 대해 정의된 모든 스크립트의 호출 간에 데이터를 저장할 수 있도록 해줍니다. 예를 들어 가로챈 메서드 A에는 적절한 텍스트 표현이 없는 객체만 전달되지만, 메서드 B를 가로채면 객체와 표시 이름 간의 연관 관계를 얻을 수 있다고 가정해 보겠습니다. 이 경우 동일한 프로브에서 메서드 B를 가로채어 객체-텍스트 연관 관계를 스크립트 컨텍스트에 직접 저장할 수 있습니다. 그런 다음 메서드 A에서 스크립트 컨텍스트로부터 해당 표시 텍스트를 가져와 페이로드 문자열을 빌드하는 데 사용할 수 있습니다.

메서드 가로채기 A:· object c· name nscriptContext.putObject(c,n);return null;시간 측정 메서드 가로채기 B:· object creturn scriptContext.getObject(c);12

이러한 문제들이 너무 복잡해진다면 임베디드 또는 인젝티드 프로브 API로 전환하는 것을 고려해야 합니다.

지원되지 않는 기능

스크립트 프로브는 커스텀 프로브 개발에 쉽게 입문할 수 있도록 설계되었지만, 전체 프로브 시스템과 비교했을 때 다음과 같이 지원되지 않는 몇 가지 기능이 있으므로 유의해야 합니다:

  • 스크립트 프로브는 호출 트리 분할을 수행할 수 없습니다. JProfiler UI에서 이는 커스텀 프로브 개념에 설명된 대로 별도의 기능입니다. 임베디드 및 인젝티드 프로브는 호출 트리 분할 기능을 직접 제공합니다.
  • 스크립트 프로브는 제어 객체를 생성하거나 커스텀 프로브 이벤트 타입을 생성할 수 없습니다. 이는 임베디드 또는 인젝티드 프로브에서만 가능합니다.
  • 스크립트 프로브는 임베디드 및 인젝티드 프로브와 달리 반환값이나 발생한 예외에 접근할 수 없습니다.
  • 스크립트 프로브는 재진입(reentrant) 가로채기를 처리할 수 없습니다. 메서드가 재귀적으로 호출되는 경우 첫 번째 호출만 가로챕니다. 임베디드 및 인젝티드 프로브는 재진입 동작에 대해 세밀한 제어를 제공합니다.
  • 기본 텔레메트리 이외의 텔레메트리를 프로브 뷰에 번들로 포함할 수 없습니다. 대신 커스텀 프로브 개념.에 설명된 대로 스크립트 텔레메트리 기능을 사용할 수 있습니다.