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 | 分析运行是否应在离线模式下进行。 |
否,offline 和nowait 不能同时为true 。
|
nowait | 分析是否应立即开始,或者被分析的JVM是否应等待来自JProfiler GUI的连接。 | |
sessionId |
定义应从中获取分析设置的会话ID。如果既未设置nowait 也未设置offline,则无效,
因为在这种情况下,分析会话是在GUI中选择的。
|
如果以下条件之一成立,则必需:
|
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 选项。
其中之一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
任务可以比较两个或多个快照。
它的属性有:
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
任务类似的obfuscator
和mappingfile
属性用于反混淆。
属性removeUnreferenced
、retainSoft
、retainWeak
、
retainPhantom
、retainFinalizer
和retained
对应于命令行工具的参数。
使用Analyze
任务的示例如下:
task analyze(type: com.jprofiler.gradle.Analyze) { snapshotFiles = fileTree(dir: 'snapshots', include: '*.jps') retainWeak = true obfuscator = 'proguard' mappingFile = file('obfuscation.txt') }