Gradleタスク
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') }