dotTrace 2020.3 ヘルプ

dotTrace コマンドラインプロファイラーを使用する

継続的な統合ビルドの一部をプロファイリングする場合など、パフォーマンススナップショットを収集するプロセスを自動化する必要がある場合があります(たとえば、これは統合テストのプロファイリングを実行するビルドステップになります)。この目的のために、dotTrace は Windows、macOS、Linux 用の一連のコマンドラインツールを提供します。

OS ツール 分布
Windows
macOS
Linux

コマンドラインツールを使用したアプリケーションのプロファイリング

  1. プロファイリングのシナリオに応じて、ConsoleProfiler.exe を必要なオプションで実行します。例:

    • タイムラインプロファイリングタイプを使用してスタンドアロンアプリケーション App.exe を実行およびプロファイルするには、次の手順を実行します。

      ConsoleProfiler.exe start --save-to=c:\Snapshots\snapshot.dtt --profiling-type=Timeline c:\MyApp\App.exe

    • スタンドアロンアプリケーション App.exe を実行してプロファイリングし(デフォルトのサンプリングプロファイリングタイプを使用)、プロファイリング API を使用してセッションを制御するには:

      ConsoleProfiler.exe start --save-to=c:\Snapshots\snapshot.dtp c:\MyApp\App.exe --use-api

    • 実行中のアプリケーションに PID=1234 でアタッチし、サンプリングプロファイリングタイプを使用してプロファイリングするには:

      ConsoleProfiler.exe attach 1234 --save-to=c:\Snapshots\snapshot.dtp

    • 使用可能なオプションの完全なリストを表示するには、引数なしでツールを実行します。

      ConsoleProfiler.exe

    プロファイルされたアプリケーションの動作が完了すると、コマンドラインプロファイラーがパフォーマンススナップショットを自動的に保存します。

    いつでも手動でスナップショットを作成したい場合は、プロファイラーの stdin またはディスク上のファイルにメッセージを送信することで実行できます。

  2. スタンドアロンの dotTrace、Rider の dotTrace、またはレポーターツールを使用してスナップショットを分析します。

  1. プロファイリングのシナリオに応じて、dotTrace.sh を必要なオプションで実行します。例:

    • Mono アプリケーション myMonoApp を実行およびプロファイルするには:

      ./dotTrace.sh start --framework=Mono /usr/bin/mono /home/Projects/MyMonoApp/myMonoApp --profiling-type=Timeline --timeout=10s --save-to=./snapshots/snapshot.dtt

      /usr/bin/mono をプロファイリングターゲットとして指定し、Timeline プロファイリングタイプを使用する必要があることに注意してください(他のタイプは macOS および Linux 上の Mono ではサポートされていません)。

    • .NET Core 3.1(またはそれ以降)アプリケーション MyNetCoreApp.dll を実行してプロファイリングするには:

      ./dotTrace.sh start --framework=NetCore /usr/bin/dotnet /home/Projects/MyNetCoreApp/MyNetCoreApp.dll --timeout=10s --save-to=./snapshots/snapshot.dtp

    • .NET Core 3.0(またはそれ以前)のアプリケーション MyNetCoreApp.dll を実行してプロファイリングするには:

      ./dotTrace.sh start --framework=NetCore /usr/bin/dotnet /home/Projects/MyNetCoreApp/MyNetCoreApp.dll --support-earlier-net-core --timeout=10s --save-to=./snapshots/snapshot.dtp

    • 使用可能なオプションの完全なリストを表示するには、引数なしでツールを実行します。

      ./dotTrace.sh

    プロファイルされたアプリケーションの動作が完了すると、コマンドラインプロファイラーがパフォーマンススナップショットを自動的に保存します。

  2. スタンドアロン dotTrace、または Rider の dotTrace を使用してスナップショットを分析します

stdin または file を使用したプロファイリングセッションの制御

場合によっては、プロファイリングプロセスを直接制御する必要があります。たとえば、直接コマンドで正確な瞬間にスナップショットを取得する必要があります。これは次の方法で実行できます。

  • ConsoleProfiler.exe の stdin にメッセージを送信する | dotTrace.sh ,

  • ディスク上のファイルにメッセージを書き込む。

MyApp.exe を起動し、stdin メッセージを使用してプロファイリングを制御するには

  1. attach または start コマンドを使用してプロファイリングを開始できます。

    stdin を使用してセッションを制御する場合:

    ConsoleProfiler.exe start --service-input=stdin c:\MyApp\MyApp.exe

    ファイルを使用してセッションを制御する場合:

    ConsoleProfiler.exe start --service-input=file.txt c:\MyApp\MyApp.exe
    セッションを実行する前にファイルを作成する必要があることに注意してください。

  2. 次のコマンドを stdin に送信するか、file.txt に書き込んでスナップショットを取得します。

    ##dotTrace["get-snapshot", {pid:1234}]
    pid が指定されている場合、dotTrace は指定された PID を持つプロセスのスナップショットを取得します。それ以外の場合、dotTrace はすべてのプロファイルされたプロセスのスナップショットを取得します。

  3. プロファイリングを停止し、プロファイルされたアプリケーションを強制終了するには、次のコマンドを stdin または file.txt に送信します。

    ##dotTrace["disconnect"]

dotTrace は、stdout に特別なサービスメッセージを送信することで、プロファイリングプロセスの進行状況を通知します。これは、外部スクリプトによってプロファイリングを制御する場合に特に役立ちます。出力の例:

D:\dotTrace> .\ConsoleProfiler.exe start --service-input=stdin C:\MyApp\MyApp.exe dotTrace Console Profiler 2020.2 Copyright (C) 2020 JetBrains s.r.o. Profiling in progress... ##dotTrace["ready"] You can control profiling by sending command messages to stdin. For details, type ##dotTrace["help"] Executable='C:\MyApp\MyApp.exe' (non-child) is being passed for filtering Passed filter executable='C:\MyApp\MyApp.exe' ##dotTrace["connected",{"pid":19016,"path":"C:\\MyApp\\MyApp.exe"}] ##dotTrace["started",{"pid":19016,"path":"C:\\MyApp\\MyApp.exe"}] ##dotTrace["get-snapshot"] ##dotTrace["stopped",{"pid":19016,"path":"C:\\MyApp\\MyApp.exe"}] ##dotTrace["snapshot-saved",{"pid":19016,"filename":"D:\\dotTrace\\Zupifix.dtp"}]

myApp を開始し、stdin メッセージを使用してプロファイリングを制御するには

  1. attach または start コマンドを使用してプロファイリングを開始できます。

    stdin を使用してセッションを制御する場合:

    ./dotTrace.sh start --service-input=stdin ~/MyApp/myApp

    ファイルを使用してセッションを制御する場合:

    ./dotTrace.sh start --service-input=file.txt ~/MyApp/myApp
    セッションを実行する前にファイルを作成する必要があることに注意してください。

  2. 次のコマンドを stdin に送信するか、file.txt に書き込んでスナップショットを取得します。

    ##dotTrace["get-snapshot", {pid:1234}]
    pid が指定されている場合、dotTrace は指定された PID を持つプロセスのスナップショットを取得します。それ以外の場合、dotTrace はすべてのプロファイルされたプロセスのスナップショットを取得します。

  3. プロファイリングを停止し、プロファイルされたアプリケーションを強制終了するには、次のコマンドを stdin または file.txt に送信します。

    ##dotTrace["disconnect"]

dotTrace は、stdout に特別なサービスメッセージを送信することで、プロファイリングプロセスの進行状況を通知します。これは、外部スクリプトによってプロファイリングを制御する場合に特に役立ちます。出力の例:

./dotTrace.sh start --service-input=stdin ~/MyApp/myApp dotTrace Console Profiler 2020.2 Copyright (C) 2020 JetBrains s.r.o. Profiling in progress... ##dotTrace["ready"] You can control profiling by sending command messages to stdin. For details, type ##dotTrace["help"] Executable='~/MyApp/myApp' (non-child) is being passed for filtering Passed filter executable='~/MyApp/myApp' ##dotTrace["connected",{"pid":19016,"path":"~/MyApp/myApp"}] ##dotTrace["started",{"pid":19016,"path":"~/MyApp/myApp"}] ##dotTrace["get-snapshot"] ##dotTrace["stopped",{"pid":19016,"path":"~/MyApp/myApp"}] ##dotTrace["snapshot-saved",{"pid":19016,"filename":"~/dotTrace/Zupifix.dtp"}]

コマンドラインプロファイラーの終了コード

デフォルトでは、ツールが作業を正常に終了した場合、終了コードは 0 です。これは場合によっては不便かもしれません。例: CI サーバーでツールを実行する場合、プロファイルされたアプリケーション(たとえば、単体テストランナー)の終了コードを取得する必要がある場合があります。プロファイラーがプロファイリングターゲットの終了コードを返すようにするには、--propagate-exit-code 引数を使用します。

例(Windows の場合):

ConsoleProfiler.exe start --save-to=c:\Snapshots\snapshot.dtp --profiling-type=Sampling c:\MyApp\App.exe --propagate-exit-code

(オプション、Windows のみ)XML ファイルを使用したプロファイリングの構成

上記セクションでは、プロファイリング構成(プロファイリングターゲット、プロファイリングメソッドなど)を ConsoleProfiler.exe 引数として提供しました。何らかの理由でこの方法でセッションを構成したくない場合は、XML ファイルで構成を提供できます。

ファイル作成を簡単にするために、Configuration2Xml32.exe(および 64 ビットバージョン Configuration2Xml64.exe)ツールを使用できます。このツールを使用すると、使い慣れた dotTrace ホームウィンドウのユーザーインターフェースを使用して XML 構成ファイルを作成できます。

Configuration2Xml を使用して構成ファイルを作成または変更するには

  1. dotTrace インストールディレクトリ(デフォルトでは C:\Users\[username]\AppData\Local\JetBrains\Installations\dotTrace[N])にある Configuration2Xml32.exe または Configuration2Xml64.exe ツールを実行します。

  2. 新しいプロファイリング構成を作成するには、新しい設定を作成するメニューを選択します。
    既存のプロファイリング構成を変更するには、構成を開くを選択します。

  3. dotTrace ホームウィンドウで通常行うようにプロファイリングオプションを指定します。

  4. 保存をクリックして、設定ファイルのファイル名とパスを指定します。

  5. 保存をクリックします。

XML ファイルを使用して設定されたプロファイリングセッションを実行するには

  • コマンドラインで次のコマンドを実行します。

    ConsoleProfiler.exe xmlfile <path_to_config> --save-to=<path_to_snapshot>
    どこ
    <path_to_config> -XML 構成ファイルへのパス。
    <path_to_snapshot> - 結果のスナップショットファイルへのパス。フルパス(スナップショットファイル名を含む)またはディレクトリへのパスのみ(ファイル名なし)のいずれかを指定できることに注意してください。後者の場合、スナップショットファイルにはランダムな名前が付けられます。

    例:

    ConsoleProfiler.exe xmlfile config.xml --save-to=c:\Snapshots\snapshot.dtp

(Windows のみ)Reporter.exe ツールを使用してパフォーマンスレポートを生成する

Reporter.exe ツールは 2 つのモードで動作します。

  • 特定のメソッドのパフォーマンスデータを取得します
    結果の XML レポートは、特定のメソッドの実行時間と呼び出し数に関するデータを取得します。

  • スナップショットの比較
    結果の XML レポートは、特定のメソッドの実行時間と呼び出し回数の違いに関するデータを取得します。このモードは、最新のビルドで取得したパフォーマンスデータを参照スナップショットと比較する場合に特に役立ちます。

選択するモードにかかわらず、レポートに追加するメソッド名を指定する必要があります。

1. レポートの方法を指定する

レポートに追加する必要があるメソッドのリストは、XML パターンファイルによって定義されます。

パターンファイルを作成するには

  1. 任意のエディターで、空の XML ファイルを作成します。

  2. 次の例に示すように、レポートに追加する必要があるメソッドのリストを記述します。

    <Patterns> <Pattern PrintCallstacks = "MethodNameOnly">Method1</Pattern> <Pattern>Method2</Pattern> </Patterns>
    where

    • Method1Method2 - パフォーマンスデータを取得するメソッドの名前(名前の部分文字列ではない)と一致する正規表現。メソッド名に特殊文字が含まれている場合は、バックスラッシュ \ シンボルでエスケープする必要があることに注意してください。例: MyMethod\+MySubMethod

    • PrintCallstacks - コールスタックデータをレポートに含めることができるオプションの属性(そのようなレポートの例を以下に示します)。 PrintCallstacks には 2 つの使用可能な値があります。

      • Full - 完全修飾メソッド名はコールスタックに表示されます。

      • MethodNameOnly - メソッド名のみ(名前空間とクラス名を除く)が呼び出しスタックに表示されます。

  3. ファイルを保管します。

2a: パフォーマンスレポートの生成

パフォーマンスレポートを生成するには

  • コマンドラインで次のコマンドを実行します。

    Reporter.exe report <path_to_snapshot> --pattern=<path_to_pattern> --save-to=<path_to_report>
    どこ
    <path_to_snapshot> - ソーススナップショットファイルへのパス。
    <path_to_pattern> - レポートに追加されたメソッドの名前を含む XML パターンファイルへのパス。
    <path_to_report> - 結果のレポートファイルへのパス。

例:

Reporter.exe report c:\Snapshots\snapshot.dtp --pattern=pattern.xml --save-to=c:\Reports\report.xml

レポートの例

<Report> <Info> <Snapshot IndexFile="C:\snapshot1.dtp" Executable="C:\Temp\ConsoleAppTest.exe" CommandLine="C:\Temp\ConsoleAppTest.exe" /> </Info> <Function FQN="Tests.Method1" TotalTime="500" OwnTime="100" Calls="1" /> <Function FQN="Tests.Method2" TotalTime="400" OwnTime="200" Calls="10" /> </Report>

どこ
FQN - 完全なメソッド名。
TotalTime - メソッドの呼び出しサブツリーの実行時間。
OwnTime - メソッド自体の実行時間。
Calls - 呼び出しの数。

XML パターンファイル内の特定の Pattern に対して PrintCallstacks 属性が指定されている場合、レポートには追加の呼び出しスタックデータが含まれます。例: 一部の GetFileNames 関数に <Pattern PrintCallstacks = "MethodNameOnly"> が指定されました。この場合、結果のレポートの対応する Function ノードには、呼び出しスタックを持つ追加の Instance サブノードが含まれます。

<Function Id="0x0020000C" FQN="MyApplication.MainWindow.GetFileNames" TotalTime="12520" OwnTime="0" Calls="1740" Instances="1"> <Instance CallStack="Main/Run/Run/RunInternal/RunDispatcher/PushFrame/PushFrameImpl/OnClick/RaiseEvent/RaiseEventImpl/InvokeHandlersImpl/InvokeHandler/btnSelectFiles_Click/GetFileNames" TotalTime="12520" OwnTime="0" Calls="1740" /> </Function>

2b: スナップショットの違いに関するレポートの生成

2 つのスナップショットを比較し、相違点に関するレポートを生成するには

  • コマンドラインで次のコマンドを実行します。

    Reporter.exe compare <path_to_snapshot1> <path_to_snapshot2> --pattern=<path_to_pattern> --save-to=<path_to_report>
    どこ
    <path_to_snapshot1> - 参照スナップショットファイルへのパス。
    <path_to_snapshot2> -2 番目のスナップショットファイルへのパス。
    <path_to_pattern> - レポートに追加されたメソッドの名前を含む XML パターンファイルへのパス。
    <path_to_report> - 結果のレポートファイルへのパス。

例:

Reporter.exe compare c:\Snapshots\base_snapshot.dtp c:\Snapshots\snapshot.dtp --pattern=pattern.xml --save-to=c:\Reports\report.xml

結果レポートファイルは、「レポート」モードで得られるものと似ていますが、唯一の違いはすべてのフィールドに絶対時間やコール数の数ではなくスナップショット間のデルタが含まれることです。デルタ記号に応じて、値は + または - の接頭辞で始まります。

関連ページ:

API を使用したプロファイリングセッションの制御

プロファイリング API は、プロファイリングプロセスを制御できるようにする多数のクラスを提供します。例: アプリケーションのコードから、次のことができます。プロファイリングデータの収集を開始する:,、データ収集を停止する:,、データをディスクに保存する:,、その他、API クラスの詳細については、API 参照を参照してください。プロファイリング API を使用する必要がある主なシナリオは 2 つあります。コードの特定部分のプロファイリング、自己プロファイルアプリケーション。コードの特定部分のプロ...

.NET コードのパフォーマンスプロファイリング

パフォーマンスプロファイリングの目的は、アプリケーションのパフォーマンス問題の原因を見つけることです。これには、たとえば、「最も遅い方法は何ですか」という直接的なことが含まれます。CPU の枯渇、ガベージコレクションのブロック、ディスク I/ O、その他の問題に関連するパフォーマンスのボトルネックの分析、およびより複雑な分析。JetBrains Rider は dotTrace プロファイラーと統合して、.NET アプリケーションのパフォーマンスプロファイリングを提供します。プロファイラーは、dot...

プロファイリングセッションの構成

プロファイリングターゲットを選択したら、プロファイリングセッションの設定に進むことができます。dotTrace の実行方法に応じて、プロファイリングセッションのオプションは別のウィンドウまたはホームウィンドウの右側のパネルに表示されます。オプションは 2 つのグループに分けられます。アプリケーションオプションこれらは、アプリケーションタイプに依存するオプションです。例: スタンドアロンアプリをプロファイルする場合は、アプリの実行可能ファイルへのパスを指定する必要があります。ASP サイトをプロフ...