스크립트 프로브
IDE에서 사용자 정의 프로브를 개발하려면 인터셉션 포인트와 프로브가 제공할 이점에 대한 명확한 이해가 필요합니다. 반면에 스크립트 프로브를 사용하면 JProfiler GUI에서 간단한 프로브를 직접 정의하고 API를 배우지 않고도 실험할 수 있습니다. 임베디드 또는 인젝션된 사용자 정의 프로브와 달리, 스크립트 프로브는 실행 중인 프로파일링 세션 동안 재정의할 수 있어 빠른 편집-컴파일-테스트 루프를 제공합니다.
스크립트 프로브 정의하기
스크립트 프로브는 인터셉트된 메서드를 선택하고 프로브의 페이로드 문자열을 반환하는 스크립트를 입력하여 정의됩니다. 여러 개의 메서드-스크립트 쌍을 단일 프로브로 묶을 수 있습니다.
스크립트 프로브 설정은 세션 설정에서 액세스할 수 있습니다. 여기에서 스크립트 프로브를 생성하고 삭제할 수 있으며, 다른 프로파일링 세션에서 가져올 수 있는 세트로 스크립트 프로브를 저장할 수 있습니다.
각 스크립트 프로브에는 이름과 선택적으로 설명이 필요합니다. 이름은 JProfiler의 뷰 선택기에서 "JEE & Probes" 섹션에 프로브 뷰를 추가하는 데 사용됩니다. 설명은 프로브 뷰의 헤더에 표시되며 그 목적에 대한 간단한 설명이어야 합니다.
메서드를 선택할 때는 구성된 클래스패스에서 클래스를 선택하거나 프로파일된 클래스에서 클래스를 선택하는 등 여러 옵션이 있습니다. 두 번째 단계에서는 선택한 클래스에서 메서드를 선택할 수 있습니다.
인터셉트된 메서드를 선택하는 훨씬 쉬운 방법은 호출 트리 뷰에서 선택하는 것입니다. 컨텍스트 메뉴에서 스크립트 프로브로 메서드 인터셉트 작업을 통해 새 프로브를 생성할지 기존 프로브에 인터셉션을 추가할지 묻습니다.
프로브 스크립트
스크립트 편집기에서는 인터셉트된 메서드의 모든 매개변수와 메서드가 호출된 객체에 액세스할 수 있습니다. 인터셉트된 메서드의 반환 값이나 발생한 예외에 액세스해야 하는 경우 임베디드 또는 인젝션된 프로브를 작성해야 합니다.
이 환경에서는 스크립트가 표현식 또는 반환문이 있는 문장 시퀀스로 페이로드 문자열을 구성할 수 있습니다. 이러한 스크립트의 가장 간단한 버전은 하나의 매개변수에 대해
parameter.toString()
을 반환하거나 기본 유형의 매개변수에 대해 String.valueOf(parameter)
을 반환합니다.
null
을 반환하면 페이로드가 생성되지 않습니다.
CPU와 프로브 데이터를 동시에 기록하면 CPU 섹션의 호출 트리 뷰에서 적절한 호출 스택에 있는 프로브 뷰로의 링크를 표시합니다. 또는 CPU 호출 트리 뷰에 페이로드 문자열을 인라인으로 표시하도록 선택할 수 있습니다. 프로브 마법사의 "페이로드 인터셉션->호출 트리 주석" 단계에는 이 옵션이 포함되어 있습니다.
스크립트에 사용할 수 있는 또 다른 매개변수는 스크립트 컨텍스트로, 현재 프로브에 대해 정의된 모든 스크립트의 호출 간에 데이터를 저장할 수 있는
com.jprofiler.api.agent.ScriptContext
유형의 객체입니다. 예를 들어, 인터셉트된 메서드 A는 텍스트 표현이 좋지 않은 객체만 볼 수 있지만,
객체와 표시 이름 간의 연관성은 메서드 B를 인터셉트하여 얻을 수 있다고 가정해 보겠습니다. 그런 다음 동일한 프로브에서 메서드 B를 인터셉트하고 객체-텍스트 연관성을 스크립트 컨텍스트에 직접 저장할 수
있습니다. 메서드 A에서는 스크립트 컨텍스트에서 해당 표시 텍스트를 가져와 페이로드 문자열을 구성하는 데 사용할 수 있습니다.
이러한 종류의 문제가 너무 복잡해지면 임베디드 또는 인젝션된 프로브 API로 전환하는 것을 고려해야 합니다.
누락된 기능
스크립트 프로브는 사용자 정의 프로브 개발에 쉽게 진입할 수 있도록 설계되었지만, 전체 프로브 시스템에서 몇 가지 기능이 누락되어 있다는 점을 인식해야 합니다:
- 스크립트 프로브는 호출 트리 분할을 수행할 수 없습니다. JProfiler UI에서는 사용자 정의 프로브 개념에서 설명한 대로 별도의 기능입니다. 임베디드 및 인젝션된 프로브는 호출 트리 분할 기능을 직접 제공합니다.
- 스크립트 프로브는 제어 객체를 생성하거나 사용자 정의 프로브 이벤트 유형을 생성할 수 없습니다. 이는 임베디드 또는 인젝션된 프로브에서만 가능합니다.
- 스크립트 프로브는 반환 값이나 발생한 예외에 액세스할 수 없습니다. 이는 임베디드 및 인젝션된 프로브와 다릅니다.
- 스크립트 프로브는 재진입 인터셉션을 처리할 수 없습니다. 메서드가 재귀적으로 호출되면 첫 번째 호출만 인터셉트됩니다. 임베디드 및 인젝션된 프로브는 재진입 동작에 대한 세밀한 제어를 제공합니다.
- 기본 텔레메트리 외의 텔레메트리를 프로브 뷰에 번들로 묶을 수 없습니다. 대신, 사용자 정의 프로브 개념에서 설명한 대로 스크립트 텔레메트리 기능을 사용할 수 있습니다.