JProfiler ヘルプ

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 プロファイリング実行をオフラインモードにするかどうか。 いいえ。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 チューニングやデバッグ目的で追加のライブラリパラメータを渡したい場合、この属性で指定できます。 いいえ

プロジェクト内でコンパイルされたmainメソッドを持つ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オプションが必要です。 noneproguardyguardのいずれか。 いいえ
mappingFile 選択したオブファスケータ用のマッピングファイル。obfuscator属性が指定されている場合のみ設定可能です。 obfuscatorが指定されている場合のみ

エクスポートタスクでは、viewsメソッドを呼び出し、その中でview(name, file[, options])を 1回または複数回呼び出します。各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を渡せます。

スナップショットごとに個別のデオブファスケーション設定がある場合、ファイル名は <ファイル名>:<obfuscator>:<mapping file> の形式で指定できます。ここで<obfuscator>と<mapping file>は下記のグローバルオプションに対応します。

はい
obfuscator 選択したオブファスケータ用にクラス名やメソッド名をデオブファスケートします。 デフォルトは"none"で、他の値の場合はmappingFileオプションが必要です。 noneproguardyguardのいずれか。 いいえ
mappingFile 選択したオブファスケータ用のマッピングファイル。obfuscator属性が指定されている場合のみ設定可能です。 obfuscatorが指定されている場合のみ
sortByTime trueに設定すると、指定された全てのスナップショットファイルがファイルの更新日時でソートされます。 それ以外の場合はsnapshotFiles属性で指定された順序で比較されます。 いいえ
ignoreErrors 比較オプションの設定時にエラーが発生した場合に無視して次の比較に進みます。 デフォルト値はfalseで、最初のエラー発生時にエクスポートが終了します。 いいえ

エクスポートタスクでビューを定義するのと同様に、Compareタスクにはcomparisonsメソッドがあり、 comparison(name, file[, options])のネスト呼び出しで比較内容を定義します。 利用可能な比較名一覧は jpcompare コマンドライン実行ファイルのヘルプページを参照してください。

compareタスクの使用例は以下の通りです。

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属性でデオブファスケーションを指定します。 removeUnreferencedretainSoftretainWeakretainPhantomretainFinalizerretained属性は コマンドラインツールの引数に対応します。

Analyzeタスクの使用例は以下の通りです。

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