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タイプのタスクを使用します。
追加の構成なしで、両方のタスクはインタラクティブなプロファイリングセッションを開始し、プロファイリングエージェントはデフォルトポート8849で JProfiler GUIからの接続を待ちます。オフラインプロファイリングの場合、以下の表に示すいくつかの属性を追加する必要があります。
| 属性 | 説明 | 必須 |
|---|---|---|
| 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
コマンドラインツールの引数を複製します。
次の属性をサポートしています:
| 属性 | 説明 | 必須 |
|---|---|---|
| snapshotFile |
スナップショットファイルへのパス。これは.jps拡張子を持つファイルでなければなりません。
|
はい |
| ignoreErrors |
ビューのオプションを設定できない場合に発生するエラーを無視し、次のビューに進みます。
デフォルト値はfalseで、最初のエラーが発生したときにエクスポートが終了します。
|
いいえ |
| csvSeparator | CSVエクスポートのフィールドセパレータ文字。デフォルトは","です。 | いいえ |
| obfuscator |
選択されたオブファスケータのためにクラスとメソッド名をデオブファスケートします。デフォルトは"none"で、
他の値の場合はmappingFileオプションを指定する必要があります。
none、proguard、yguardのいずれか。
|
いいえ |
| mappingFile |
選択されたオブファスケータのためのマッピングファイル。obfuscator属性が指定されている場合にのみ設定できます。
|
obfuscatorが指定されている場合のみ
|
エクスポートタスクでは、viewsメソッドを呼び出し、その中でview(name, file[, options])を
一度または複数回呼び出すクロージャを渡します。viewの各呼び出しは1つの出力ファイルを生成します。
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タスクは2つ以上のスナップショットを比較できます。
その属性は次の通りです:
| 属性 | 説明 | 必須 |
|---|---|---|
| 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.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')
}