JProfiler 도움말Download

Gradle Tasks


JProfiler는 Gradle에서 특별한 태스크를 사용하여 프로파일링을 지원합니다. 또한, JProfiler는 스냅샷 작업을 위한 명령줄 실행 파일에 해당하는 여러 Gradle 태스크를 제공합니다.

Gradle 태스크 사용하기

JProfiler Gradle 태스크를 Gradle 빌드 파일에서 사용 가능하게 하려면, plugins 블록을 사용할 수 있습니다.

plugins {
    id 'com.jprofiler' version 'X.Y.Z'
}

이 목적을 위해 Gradle 플러그인 저장소를 사용하고 싶지 않다면, Gradle 플러그인은 bin/gradle.jar 파일에 배포됩니다.

다음으로, JProfiler Gradle 플러그인에 JProfiler가 설치된 위치를 알려야 합니다.

jprofiler {
    installDir = file('/path/to/jprofiler/home')
}

Gradle에서 프로파일링하기

com.jprofiler.gradle.JavaProfile 유형의 태스크를 사용하여 모든 Java 프로세스를 프로파일링할 수 있습니다. 이 클래스는 Gradle의 내장 JavaExec를 확장하므로 프로세스를 구성하기 위해 동일한 인수를 사용할 수 있습니다. 테스트를 프로파일링하려면 Gradle Test 태스크를 확장하는 com.jprofiler.gradle.TestProfile 유형의 태스크를 사용하십시오.

추가 구성 없이, 두 태스크 모두 프로파일링 에이전트가 JProfiler GUI로부터의 연결을 기다리는 기본 포트 8849에서 대기하는 대화형 프로파일링 세션을 시작합니다. 오프라인 프로파일링을 위해서는 아래 표에 나와 있는 몇 가지 속성을 추가해야 합니다.

 
AttributeDescriptionRequired
offline 프로파일링 실행이 오프라인 모드에서 수행되어야 하는지 여부입니다. 아니요, offlinenowait는 모두 true일 수 없습니다.
nowait 프로파일링이 즉시 시작되어야 하는지 아니면 프로파일된 JVM이 JProfiler GUI로부터의 연결을 기다려야 하는지 여부입니다.
sessionId 프로파일링 설정이 가져와야 하는 세션 ID를 정의합니다. nowait 또는 offline이 설정되지 않은 경우에는 효과가 없습니다. 이 경우 프로파일링 세션이 GUI에서 선택됩니다. 필수, 만약
  • offline이 설정된 경우
  • 1.5 JVM에 대해 nowait이 설정된 경우
configFile 프로파일링 설정이 읽혀야 하는 구성 파일을 정의합니다. 아니요
port 프로파일링 에이전트가 JProfiler GUI로부터의 연결을 대기해야 하는 포트 번호를 정의합니다. 이는 원격 세션 구성에서 구성된 포트와 동일해야 합니다. 설정되지 않거나 0인 경우 기본 포트(8849)가 사용됩니다. offline이 설정된 경우에는 GUI로부터의 연결이 없으므로 효과가 없습니다. 아니요
debugOptions 튜닝이나 디버깅 목적으로 추가 라이브러리 매개변수를 전달하려면, 이 속성을 사용하여 할 수 있습니다. 아니요
 

메인 메서드를 가진 Java 클래스를 프로파일링하는 예제는 아래에 나와 있습니다:

task run(type: com.jprofiler.gradle.JavaProfile) {
    mainClass = 'com.mycorp.MyMainClass'
    classpath sourceSets.main.runtimeClasspath
    offline = true
    sessionId = 80
    configFile = file('path/to/jprofiler_config.xml')
}

이 태스크의 실행 가능한 예제는 api/samples/offline 샘플 프로젝트에서 볼 수 있습니다. 표준 JavaExec 태스크와 달리, JavaProfile 태스크는 createProcess()를 호출하여 백그라운드에서 시작할 수도 있습니다. 이 기능의 데모는 api/samples/mbean 샘플 프로젝트에서 확인할 수 있습니다.

프로파일링에 필요한 VM 매개변수가 필요한 경우, com.jprofiler.gradle.SetAgentpathProperty 태스크는 propertyName 속성으로 구성된 속성에 할당합니다. JProfiler 플러그인을 적용하면 자동으로 setAgentPathProperty라는 이름의 이 유형의 태스크가 프로젝트에 추가됩니다. 이전 예제에서 사용될 VM 매개변수를 얻으려면, 단순히 추가하십시오.

setAgentPathProperty {
    propertyName = 'profilingVmParameter'
    offline = true
    sessionId = 80
    configFile = file('path/to/jprofiler_config.xml')
}

프로젝트에 추가하고 setAgentPathProperty에 대한 종속성을 다른 태스크에 추가하십시오. 그런 다음 해당 태스크의 실행 단계에서 프로젝트 속성 profilingVmParameter를 사용할 수 있습니다. 다른 태스크 속성에 속성을 할당할 때는 doFirst {...} 코드 블록으로 사용을 감싸서 Gradle 실행 단계에 있고 구성 단계에 있지 않음을 확인하십시오.

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

com.jprofiler.gradle.Export 태스크는 저장된 스냅샷에서 뷰를 내보내는 데 사용되며 bin/jpexport 명령줄 도구의 인수를 복제합니다. 다음 속성을 지원합니다:

 
AttributeDescriptionRequired
snapshotFile 스냅샷 파일의 경로입니다. 이 파일은 .jps 확장자를 가진 파일이어야 합니다.
ignoreErrors 뷰에 대한 옵션을 설정할 수 없을 때 발생하는 오류를 무시하고 다음 뷰로 계속 진행합니다. 기본값은 false이며, 첫 번째 오류가 발생하면 내보내기가 종료됩니다. 아니요
csvSeparator CSV 내보내기의 필드 구분 문자입니다. 기본값은 ","입니다. 아니요
obfuscator 선택한 난독화 도구에 대해 클래스 및 메서드 이름을 디난독화합니다. 기본값은 "none"이며, 다른 값을 사용하려면 mappingFile 옵션을 지정해야 합니다. none, proguard 또는 yguard 중 하나입니다. 아니요
mappingFile 선택한 난독화 도구의 매핑 파일입니다. obfuscator 속성이 지정된 경우에만 설정할 수 있습니다. obfuscator 속성이 지정된 경우에만
 

내보내기 태스크에서는 views 메서드를 호출하고, view(name, file[, options])를 한 번 또는 여러 번 호출하는 클로저를 전달합니다. view를 호출할 때마다 하나의 출력 파일이 생성됩니다. name 인수는 뷰 이름입니다. 사용 가능한 뷰 이름 목록은 jpexport 명령줄 실행 파일의 도움말 페이지를 참조하십시오. file 인수는 출력 파일로, 절대 파일이거나 프로젝트에 상대적인 파일일 수 있습니다. 마지막으로, 선택적인 options 인수는 선택한 뷰에 대한 내보내기 옵션을 포함하는 맵입니다.

내보내기 태스크를 사용하는 예제는 다음과 같습니다:

task export(type: com.jprofiler.gradle.Export) {
    snapshotFile = file('snapshot.jps')
    views {
        view('CallTree', 'callTree.html')
        view('HotSpots', 'hotSpots.html',
            [threadStatus: 'all', expandBacktraces: 'true'])
    }
}

스냅샷 비교하기

bin/jpcompare 명령줄 도구와 마찬가지로, com.jprofiler.gradle.Compare 태스크는 두 개 이상의 스냅샷을 비교할 수 있습니다. 속성은 다음과 같습니다:

 
AttributeDescriptionRequired
snapshotFiles 비교할 스냅샷 파일입니다. Gradle이 파일 컬렉션으로 해석하는 객체를 포함하는 Iterable을 전달할 수 있습니다.
sortByTime true로 설정되면 제공된 모든 스냅샷 파일이 파일 수정 시간에 따라 정렬되고, 그렇지 않으면 snapshotFiles 속성에 지정된 순서대로 비교됩니다. 아니요
ignoreErrors 비교에 대한 옵션을 설정할 수 없을 때 발생하는 오류를 무시하고 다음 비교로 계속 진행합니다. 기본값은 false이며, 첫 번째 오류가 발생하면 내보내기가 종료됩니다. 아니요
 

내보낸 뷰가 Export 태스크에 대해 정의된 것과 마찬가지로, Compare 태스크는 comparisons 메서드를 가지고 있으며, comparison(name, file[, options])에 대한 중첩 호출이 수행해야 할 비교를 정의합니다. 사용 가능한 비교 이름 목록은 jpcompare 명령줄 실행 파일의 도움말 페이지에서 확인할 수 있습니다.

비교 태스크를 사용하는 예제는 다음과 같습니다:

task compare(type: com.jprofiler.gradle.Compare) {
    snapshotFiles = files('snapshot1.jps', 'snapshot2.jps')
    comparisons {
        comparison('CallTree', 'callTree.html')
        comparison('HotSpots', 'hotSpots.csv',
            [valueSummation: 'total', format: 'csv'])
    }
}

또는 여러 스냅샷에 대한 텔레메트리 비교를 생성하려면:

task compare(type: com.jprofiler.gradle.Compare) {
    snapshotFiles = fileTree(dir: 'snapshots', include: '*.jps')
    sortByTime = true
    comparisons {
        comparison('TelemetryHeap', 'heap.html', [valueType: 'maximum'])
        comparison('ProbeTelemetry', 'jdbc.html', [probeId: 'JdbcProbe'])
    }
}

힙 스냅샷 분석하기

Gradle 태스크 com.jprofiler.gradle.Analyzebin/jpanalyze 명령줄 도구와 동일한 기능을 가지고 있습니다.

이 태스크는 Compare 태스크와 마찬가지로 처리된 스냅샷을 지정하기 위한 snapshotFiles 속성과 디난독화를 위한 Export 태스크와 같은 obfuscatormappingfile 속성을 가지고 있습니다. removeUnreferenced, retainSoft, retainWeak, retainPhantom, retainFinalizerretained 속성은 명령줄 도구의 인수에 해당합니다.

Analyze 태스크를 사용하는 예제는 다음과 같습니다:

task analyze(type: com.jprofiler.gradle.Analyze) {
    snapshotFiles = fileTree(dir: 'snapshots', include: '*.jps')
    retainWeak = true
    obfuscator = 'proguard'
    mappingFile = file('obfuscation.txt')
}