JProfiler 도움말

Maven Goal

JProfiler는 JProfiler Maven 플러그인을 통한 Maven 기반 프로파일링을 지원합니다. 또한 JProfiler는 해당 Maven goal과 매핑되는 스냅샷 작업을 위한 다양한 커맨드 라인 실행 파일을 제공합니다.

Maven 플러그인 사용하기

JProfiler Maven 플러그인은 좌표 com.jprofiler:jprofiler-maven으로 Maven Central 저장소에서 제공됩니다. Maven 빌드에서 사용하려면 pom.xml 파일의 plugins 항목에 추가하십시오:

<build>
  <plugins>
    <plugin>
      <groupId>com.jprofiler</groupId>
      <artifactId>jprofiler-maven</artifactId>
      <version>X.Y.Z</version>
      ...
    </plugin>
  </plugins>
</build>

기본적으로 이 플러그인은 플러그인과 동일한 버전의 JProfiler 배포판을 자동으로 프로비저닝(auto-provision)합니다. 자동 프로비저닝된 배포판은 플랫폼별 캐시 디렉터리에 저장됩니다: Windows의 경우 %LOCALAPPDATA%\jprofilerDist, macOS의 경우 ~/Library/Caches/jprofilerDist, Linux의 경우 $XDG_CACHE_HOME/jprofilerDist 또는 ~/.cache/jprofilerDist입니다. 캐시 디렉터리를 재정의하려면 각 goal의 autoProvisioningCacheDir 파라미터를 설정하십시오.

대신 로컬 JProfiler 설치본을 사용하려면, jprofiler.home 프로젝트 프로퍼티나 각 goal의 installDir 파라미터를 통해 JProfiler가 설치된 위치를 플러그인에 지정할 수 있습니다. macOS에서 설치 디렉터리는 애플리케이션 번들의 경로(예: /Applications/JProfiler.app)입니다. 플러그인은 JProfiler 설치본의 bin/maven.jar 파일로도 배포됩니다.

모든 goal은 실행을 건너뛰기 위해 jprofiler.skip 프로퍼티로 설정할 수 있는 skip 파라미터를 지원합니다.

Maven에서 프로파일링하기

profile goal은 프로파일링 에이전트와 함께 새 Java 프로세스를 시작합니다. 메인 클래스는 필수 파라미터인 mainClass로 지정합니다. classpathScope 파라미터를 사용하면 프로젝트의 런타임 또는 테스트 클래스패스를 프로파일된 프로세스에 추가할 수 있으며, 추가 클래스패스 요소는 additionalClasspath 파라미터로 추가할 수 있습니다. 메인 클래스 및 JVM에 대한 인수는 arguments 및 jvmArguments 파라미터로 지정할 수 있습니다.

추가 구성이 없으면, 이 goal은 프로파일링 에이전트가 기본 포트 8849에서 JProfiler GUI의 연결을 기다리는 대화형 프로파일링 세션을 시작합니다. 오프라인 프로파일링의 경우, 내보낸 구성 파일을 참조하거나 JavaProfile Gradle 태스크와 동일한 파라미터를 사용하여 공통 세션 설정 및 자동화된 녹화를 직접 구성할 수 있습니다. 여러 값을 허용하는 파라미터의 경우 구분 기호로 ,를 사용하십시오.

<plugin>
  <groupId>com.jprofiler</groupId>
  <artifactId>jprofiler-maven</artifactId>
  <version>X.Y.Z</version>
  <executions>
    <execution>
      <id>profile</id>
      <phase>package</phase>
      <goals>
        <goal>profile</goal>
      </goals>
      <configuration>
        <mainClass>com.mycorp.MyMainClass</mainClass>
        <classpathScope>runtime</classpathScope>
        <offline>true</offline>
        <callTreeMode>sampling</callTreeMode>
        <profile>com.mycorp.,org.example.</profile>
        <snapshotFile>snapshots/run.jps</snapshotFile>
        <recording>cpu,allocation,jdbc</recording>
        <duration>10m</duration>
      </configuration>
    </execution>
  </executions>
</plugin>

실행 정의 없이 커맨드 라인에서 직접 goal을 호출하려면 다음과 같이 실행하십시오.

mvn com.jprofiler:jprofiler-maven:X.Y.Z:profile -Djprofiler.mainClass=com.mycorp.MyMainClass

테스트 및 기타 Maven 플러그인 실행 프로파일링

maven-surefire-plugin 또는 exec-maven-plugin과 같이 다른 Maven 플러그인에 의해 시작되는 Java 프로세스에 프로파일링 에이전트를 추가하기 위해, set-agentpath-property goal은 프로젝트 프로퍼티를 프로파일링 에이전트의 VM 파라미터로 설정합니다. 기본적으로 jprofiler.agentpath 프로퍼티가 설정되며, propertyName 파라미터로 다른 프로퍼티 이름을 선택할 수 있습니다. 프로파일링 파라미터는 profile goal과 동일합니다.

<plugin>
  <groupId>com.jprofiler</groupId>
  <artifactId>jprofiler-maven</artifactId>
  <version>X.Y.Z</version>
  <executions>
    <execution>
      <id>set-agentpath-property</id>
      <phase>initialize</phase>
      <goals>
        <goal>set-agentpath-property</goal>
      </goals>
      <configuration>
        <offline>true</offline>
        <configFile>jprofiler_config.xml</configFile>
        <sessionId>479</sessionId>
      </configuration>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <argLine>${jprofiler.agentpath}</argLine>
  </configuration>
</plugin>

스냅샷에서 데이터 내보내기

Export Gradle 태스크와 마찬가지로 export goal을 사용하여 스냅샷에서 뷰를 내보낼 수 있습니다. 스냅샷 파일은 snapshotFile 파라미터로 지정되며, 뷰는 중첩된 view 엘리먼트로 지정되고 해당 옵션은 중첩된 option 엘리먼트로 지정됩니다.

<configuration>
  <snapshotFile>snapshots/test.jps</snapshotFile>
  <views>
    <view>
      <name>CallTree</name>
      <file>calltree.html</file>
    </view>
    <view>
      <name>HotSpots</name>
      <file>hotspots.html</file>
      <options>
        <option>
          <name>expandbacktraces</name>
          <value>true</value>
        </option>
        <option>
          <name>aggregation</name>
          <value>class</value>
        </option>
      </options>
    </view>
  </views>
</configuration>

스냅샷 비교하기

compare goal은 Compare Gradle 태스크에 대응하며 두 개 이상의 스냅샷 간의 비교를 수행합니다. 스냅샷 파일은 snapshotFiles 파라미터로 지정되며, 비교 항목은 export goal의 뷰와 마찬가지로 comparisons 엘리먼트 아래에 중첩됩니다.

<configuration>
  <sortByTime>true</sortByTime>
  <snapshotFiles>
    <snapshotFile>snapshots/test1.jps</snapshotFile>
    <snapshotFile>snapshots/test2.jps</snapshotFile>
  </snapshotFiles>
  <comparisons>
    <comparison>
      <name>TelemetryHeap</name>
      <file>heap.html</file>
    </comparison>
    <comparison>
      <name>TelemetryThreads</name>
      <file>threads.html</file>
      <options>
        <option>
          <name>measurements</name>
          <value>inactive,active</value>
        </option>
        <option>
          <name>valuetype</name>
          <value>bookmark</value>
        </option>
        <option>
          <name>bookmarkname</name>
          <value>test</value>
        </option>
      </options>
    </comparison>
  </comparisons>
</configuration>

힙 스냅샷 분석하기

Analyze Gradle 태스크와 마찬가지로, analyze goal은 GUI에서 더 빠르게 접근할 수 있도록 오프라인 프로파일링으로 저장된 스냅샷에서 힙 스냅샷 분석을 준비합니다. 처리할 스냅샷은 snapshotFiles 파라미터로 지정됩니다.

<configuration>
  <snapshotFiles>
    <snapshotFile>snapshots/test_heap.jps</snapshotFile>
  </snapshotFiles>
</configuration>