JProfiler ヘルプDownload

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からの接続を待つポート番号を定義します。 これはリモートセッション構成で設定されたポートと同じでなければなりません。 設定されていないかゼロの場合、デフォルトポート(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オプションを指定する必要があります。 noneproguardyguardのいずれか。 いいえ
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 属性があります。属性removeUnreferencedretainSoftretainWeakretainPhantomretainFinalizerretainedはコマンドラインツールの引数に対応しています。

Analyzeタスクを使用する例は以下の通りです:

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