JProfiler帮助文档Download

Gradle Tasks(Gradle任务)


JProfiler支持通过Gradle的特殊任务进行分析。此外,JProfiler提供了一些 用于处理快照的命令行可执行文件 ,这些文件有相应的Gradle任务。

使用Gradle任务

要在Gradle构建文件中使用JProfiler 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,因此您可以使用相同的参数来配置进程。对于分析测试, 使用类型为com.jprofiler.gradle.TestProfile的任务,该任务扩展了Gradle的Test任务。

在没有任何进一步配置的情况下,这两个任务都会启动一个交互式分析会话,其中分析代理在默认端口8849上等待来自JProfiler GUI的连接。 对于离线分析,您需要添加一些在下表中显示的属性。

 
Attribute(属性)Description(描述)Required(必需)
offline 分析运行是否应在离线模式下进行。 否,offlinenowait不能同时为true
nowait 分析是否应立即开始,或者被分析的JVM是否应等待来自JProfiler GUI的连接。
sessionId 定义应从中获取分析设置的会话ID。如果既未设置nowait也未设置offline,则无效, 因为在这种情况下,分析会话是在GUI中选择的。 如果以下条件之一成立,则必需:
  • offline已设置
  • 对于1.5 JVM,nowait已设置
configFile 定义应从中读取分析设置的配置文件。
port 定义分析代理应监听来自JProfiler GUI连接的端口号。这必须与远程会话配置中配置的端口相同。 如果未设置或为零,将使用默认端口(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 命令行工具的参数。 它支持以下属性:

 
Attribute(属性)Description(描述)Required(必需)
snapshotFile 快照文件的路径。这必须是一个具有.jps扩展名的文件。
ignoreErrors 忽略在无法设置视图选项时发生的错误,并继续下一个视图。默认值为false,表示在第一个错误发生时终止导出。
csvSeparator CSV导出的字段分隔符字符。默认为","。
obfuscator 为所选混淆器反混淆类和方法名称。默认为"none",对于其他值,必须指定mappingFile选项。 其中之一noneproguardyguard
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任务可以比较两个或多个快照。 它的属性有:

 
Attribute(属性)Description(描述)Required(必需)
snapshotFiles 应该比较的快照文件。您可以传递任何Iterable,其中包含Gradle解析为文件集合的对象。
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.Analyze具有与bin/jpanalyze 命令行工具相同的功能。

该任务具有与Compare任务类似的snapshotFiles属性,用于指定处理的快照, 以及与Export任务类似的obfuscatormappingfile属性用于反混淆。 属性removeUnreferencedretainSoftretainWeakretainPhantomretainFinalizerretained对应于命令行工具的参数。

使用Analyze任务的示例如下:

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