JProfiler 아키텍처
프로파일된 애플리케이션, JProfiler UI 및 모든 명령줄 유틸리티와 관련된 중요한 상호작용의 전체 그림이 아래에 제공됩니다.
프로파일링 에이전트
"JVM tool interface" (JVMTI)는 프로파일러가 정보를 얻고 자체 계측을 삽입하기 위한 훅을 추가하기 위해 사용하는 네이티브 인터페이스입니다. 이는 프로파일링 에이전트의 적어도 일부가 네이티브 코드로 구현되어야 하며, 따라서 JVM 프로파일러는 플랫폼 독립적이지 않다는 것을 의미합니다. JProfiler는 여기에 나열된 다양한 플랫폼을 지원합니다.
JVM 프로파일러는 시작 시 또는 나중에 로드되는 네이티브 라이브러리로 구현됩니다. 시작 시 로드하려면 VM 매개변수
-agentpath:<네이티브 라이브러리 경로>
를 명령줄에 추가합니다. 이 매개변수를 수동으로 추가할 필요는 거의 없습니다.
JProfiler가 IDE 통합, 통합 마법사 또는 JVM을 직접 실행할 때 이를 추가하기 때문입니다. 그러나 이것이 프로파일링을 가능하게 하는 것임을 아는 것이 중요합니다.
JVM이 네이티브 라이브러리를 로드하는 데 성공하면, 라이브러리 내의 특별한 함수를 호출하여 프로파일링 에이전트가 초기화할 기회를 제공합니다.
JProfiler는 JProfiler>
로 시작하는 몇 가지 진단 메시지를 출력하여 프로파일링이 활성화되었음을 알립니다.
요점은 -agentpath
VM 매개변수를 전달하면 프로파일링 에이전트가 성공적으로 로드되거나 JVM이 시작되지 않는다는 것입니다.
로드되면 프로파일링 에이전트는 JVMTI에 스레드 생성이나 클래스 로딩과 같은 모든 종류의 이벤트에 대해 알림을 요청합니다. 이러한 이벤트 중 일부는 직접 프로파일링 데이터를 제공합니다. 클래스 로딩 이벤트를 사용하여 프로파일링 에이전트는 로드된 클래스에 계측을 삽입하고 자체 바이트코드를 삽입하여 측정을 수행합니다.
JProfiler는 이미 실행 중인 JVM에 에이전트를 로드할 수 있으며, JProfiler UI를 사용하거나 명령줄 도구를 사용할 수
있습니다.
이 경우, 이미 로드된 상당수의 클래스가 필요한 계측을 적용하기 위해 다시 변환되어야 할 수 있습니다.
bin/jpenable
데이터 기록
JProfiler 에이전트는 프로파일링 데이터만 수집합니다. JProfiler UI는 별도로 시작되며 소켓을 통해 프로파일링 에이전트에 연결됩니다. 원격 서버에 대한 안전한 연결을 위해 JProfiler를 구성하여 SSH 터널을 자동으로 생성할 수 있습니다.
JProfiler UI에서 에이전트에게 데이터를 기록하도록 지시하고, UI에 프로파일링 데이터를 표시하며, 스냅샷을 디스크에 저장할 수 있습니다.
UI의 대안으로, 프로파일링 에이전트는 MBean을 통해 제어될 수
있습니다.
이 MBean을 사용하는 명령줄 도구는 입니다.
bin/jpcontroller
프로파일링 에이전트를 제어하는 또 다른 방법은 미리 정의된 트리거 및 액션 세트를 사용하는 것입니다. 이렇게 하면 프로파일링 에이전트가 무인 모드로 작동할 수 있습니다. 이는 JProfiler에서 "오프라인 프로파일링"이라고 하며, 프로파일링 세션을 자동화하는 데 유용합니다.
스냅샷
JProfiler UI는 실시간 프로파일링 데이터를 표시할 수 있지만, 모든 기록된 프로파일링 데이터의 스냅샷을 저장해야 하는 경우가 종종 있습니다. 스냅샷은 JProfiler UI에서 수동으로 저장되거나 트리거 액션에 의해 자동으로 저장됩니다.
스냅샷은 JProfiler UI에서 열고 비교할 수 있습니다. 자동화된 처리를 위해 명령줄 도구 및
bin/jpexport
를 사용하여 이전에 저장된 스냅샷에서 데이터를 추출하고 HTML 보고서를 생성할 수 있습니다.
bin/jpcompare
실행 중인 JVM에서 힙 스냅샷을 얻는 저비용 방법은 명령줄 도구를 사용하는 것입니다.
이는 JVM의 내장 기능을 사용하여 JProfiler에서 열 수 있는 HPROF 스냅샷을 저장하며, 프로파일링 에이전트를 로드할 필요가 없습니다.
bin/jpdump