dotTrace コマンドラインプロファイラーを使用する
プロファイリングを継続的インテグレーションビルドの一部にしたい場合など、パフォーマンススナップショットの取得処理を自動化する必要があることがあります(たとえば、統合テストのプロファイリングを実行するビルドステップとして設定できます)。 この目的のために、dotTrace は Windows、macOS、Linux 用のコマンドラインツールを提供しています:
OS | ツール | 分布 |
|---|---|---|
Windows |
| |
macOS |
| |
Linux |
|
コマンドラインツールを使用してアプリケーションをプロファイリングする
プロファイリングのシナリオに応じて、 dotTrace.exe を必要なオプションで実行します。 例えば:
タイムラインプロファイリングタイプを使用してスタンドアロンアプリケーション App.exe を実行およびプロファイルするには、次の手順を実行します。
dotTrace.exe start --save-to=c:\Snapshots\snapshot.dtt --profiling-type=Timeline c:\MyApp\App.exeスタンドアロンアプリケーション App.exe を実行してプロファイリングし(デフォルトのサンプリングプロファイリングタイプを使用)、 プロファイリング API を使用してセッションを制御するには:
dotTrace.exe start --save-to=c:\Snapshots\snapshot.dtp c:\MyApp\App.exe --use-apiPID=1234を使って実行中のアプリケーションにアタッチし、サンプリングプロファイリングタイプでプロファイリングするには:dotTrace.exe attach 1234 --save-to=c:\Snapshots\snapshot.dtp利用可能なオプションの全一覧を見るには、引数なしでツールを実行します:
dotTrace.exe
プロファイルされたアプリケーションの動作が完了すると、コマンドラインプロファイラーがパフォーマンススナップショットを自動的に保存します。
いつでも手動でスナップショットを作成したい場合は、 プロファイラーの stdin またはディスク上のファイルにメッセージを送信することで実行できます。
スタンドアロンの dotTrace、 Rider の dotTrace 、または 報告者ツールを使用してスナップショットを分析します。
プロファイリングのシナリオに応じて、 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.dtpPID=1234を使って実行中のアプリケーションにアタッチし、サンプリングプロファイリングタイプでプロファイリングするには:./dotTrace.sh attach 1234 --save-to=./snapshots/snapshot.dtp利用可能なオプションの全一覧を見るには、引数なしでツールを実行します:
./dotTrace.sh
プロファイルされたアプリケーションの動作が完了すると、コマンドラインプロファイラーがパフォーマンススナップショットを自動的に保存します。
スタンドアロン dotTrace、または Rider の dotTrace を使ってスナップショットを分析します。
標準入力またはファイルを使用してプロファイリングセッションを制御する
プロファイリングプロセスを直接制御する必要がある場合もあります。例えば、特定のタイミングでコマンドを直接実行してスナップショットを取得するなどです。 次の方法で実行できます:
dotTrace.exeの stdin にメッセージを送信する |dotTrace.sh,ディスク上のファイルにメッセージを書き込みます。
MyApp.exe を起動し、stdin メッセージを使用してプロファイリングを制御するには
attachまたはstartコマンドを使用してプロファイリングを開始できます。stdin を使用してセッションを制御する場合:
dotTrace.exe start --service-input=stdin c:\MyApp\MyApp.exeファイルを使用してセッションを制御する場合:
dotTrace.exe start --service-input=file.txt c:\MyApp\MyApp.exeセッションを実行する前にファイルを作成する必要があることに注意してください。
次のコマンドを stdin に送信するか、file.txt に書き込んでスナップショットを取得します。
##dotTrace["get-snapshot", {pid:1234}]pidが指定されている場合、dotTrace は指定された PID のプロセスのスナップショットを取得します。 指定されていない場合、dotTrace はすべてのプロファイリング対象プロセスのスナップショットを取得します。プロファイリングを停止し、プロファイルされたアプリケーションを強制終了するには、次のコマンドを stdin または file.txt に送信します。
##dotTrace["disconnect"]
dotTrace は、stdout に特別なサービスメッセージを送信することで、プロファイリングプロセスの進行状況を通知します。 これは、外部スクリプトによってプロファイリングを制御する場合に特に役立ちます。 出力の例:
myApp を開始し、stdin メッセージを使用してプロファイリングを制御するには
attachまたはstartコマンドを使用してプロファイリングを開始できます。stdin を使用してセッションを制御する場合:
./dotTrace.sh start --framework=NetCore --service-input=stdin ~/MyApp/myAppファイルを使用してセッションを制御する場合:
./dotTrace.sh start --framework=NetCore --service-input=file.txt ~/MyApp/myAppセッションを実行する前にファイルを作成する必要があることに注意してください。
次のコマンドを stdin に送信するか、file.txt に書き込んでスナップショットを取得します。
##dotTrace["get-snapshot", {pid:1234}]pidが指定されている場合、dotTrace は指定された PID のプロセスのスナップショットを取得します。 指定されていない場合、dotTrace はすべてのプロファイリング対象プロセスのスナップショットを取得します。プロファイリングを停止し、プロファイルされたアプリケーションを強制終了するには、次のコマンドを stdin または file.txt に送信します。
##dotTrace["disconnect"]
dotTrace は、stdout に特別なサービスメッセージを送信することで、プロファイリングプロセスの進行状況を通知します。 これは、外部スクリプトによってプロファイリングを制御する場合に特に役立ちます。 出力の例:
コマンドラインプロファイラーの終了コード
デフォルトでは、ツールが作業を正常に終了した場合、終了コードは 0 です。 これは場合によっては不便かもしれません。 例: CI サーバーでツールを実行する場合、プロファイルされたアプリケーション(たとえば、単体テストランナー)の終了コードを取得する必要がある場合があります。 プロファイラーがプロファイリングターゲットの終了コードを返すようにするには、 --propagate-exit-code 引数を使用します。
例(Windows の場合):
(オプション、Windows のみ) XML ファイルを使用してプロファイリングを構成する
上記のセクションでは、 dotTrace.exe 引数としてプロファイリング構成(プロファイリングターゲット、プロファイリングメソッドなど)を提供しました。 この方法でセッションを構成したくない場合は、XML ファイルで構成を提供できます。
ファイル作成を簡単にするために、 Configuration2Xml32.exe (および 64 ビットバージョン Configuration2Xml64.exe )ツールを使用できます。 このツールを使用すると、使い慣れた dotTrace ホームウィンドウのユーザーインターフェースを使用して XML 構成ファイルを作成できます。
Configuration2Xml を使用して構成ファイルを作成または変更するには
dotTrace インストールディレクトリ(デフォルトでは C:\Users\[username]\AppData\Local\JetBrains\Installations\%instance%[N] )にある Configuration2Xml32.exe または Configuration2Xml64.exe ツールを実行します。
新しいプロファイリング構成を作成するには、 メニューを選択します。
既存のプロファイリング構成を変更するには、 を選択します。
dotTrace ホームウィンドウで 通常行うようにプロファイリングオプションを指定します。
保存 をクリックして、設定ファイルのファイル名とパスを指定します。
保存 をクリックします。
XML ファイルを使用して設定されたプロファイリングセッションを実行するには
コマンドラインで次のコマンドを実行します。
dotTrace.exe xmlfile <path_to_config> --save-to=<path_to_snapshot>where:
<path_to_config>- XML 構成ファイルへのパス。<path_to_snapshot>- 結果のスナップショットファイルへのパス。 フルパス(スナップショットファイル名を含む)またはファイル名なしのディレクトリへのパスのみを指定できることに注意してください。 後者の場合、スナップショットファイルはランダムな名前を取得します。
例えば:
dotTrace.exe xmlfile config.xml --save-to=c:\Snapshots\snapshot.dtp
コマンドラインツールをインストールして、.NETCore ツールとして使用する
マシンに .NET Core 3.1.0 以降 がある場合、dotTrace コマンドラインツールを .NET Core グローバルおよびローカルツール としてインストールして利用できます。
dotTrace コマンドラインツールをインストールする
dotTrace コマンドラインツールを グローバル .NET Core ツールとしてデフォルトの場所にインストールするには、次のコマンドラインを実行してください:
dotnet tool install --global JetBrains.dotTrace.GlobalToolsdotTrace コマンドラインツールを ローカルツールとしてインストールするには、次のコマンドをローカルで実行してください:
dotnet new tool-manifest dotnet tool install JetBrains.dotTrace.GlobalTools詳細な手順については、Microsoft の公式ドキュメントを参照してください。
dotTrace コマンドラインツールを実行する
プロファイリングを実行するには、
dottraceコマンドを使用します。 このコマンドは、dotTrace.exe(Windows の場合) またはdotTrace.sh(Linux および macOS の場合) と同じ引数を受け入れます。 例: MyApp.exe のタイムラインプロファイリングを開始するには、ソリューションディレクトリを開いて次を実行します。dottrace start --profiling-type=Timeline .\MyApp\bin\Release\MyApp.exe
(Windows のみ)Reporter.exe ツールを使用してパフォーマンスレポートを生成する
Reporter.exe ツールは 2 つのモードで動作します。
特定のメソッドのパフォーマンスデータを取得します。
結果の XML レポートには、特定のメソッドの実行時間と呼び出し回数 (*) に関するデータが取得されます。スナップショットの比較。
生成される XML レポートには、特定のメソッドの実行時間と * 呼び出し回数の差分に関するデータが含まれます。 このモードは、最新のビルドで取得したパフォーマンスデータと参照スナップショットを比較する場合に特に便利です。
選択するモードにかかわらず、レポートに追加するメソッド名を指定する必要があります。
1. レポートの方法を指定する
レポートに追加する必要があるメソッドのリストは、XML パターンファイルによって定義されます。
パターンファイルを作成するには
任意のエディターで、空の XML ファイルを作成します。
次の例に示すように、レポートに追加する必要があるメソッドのリストを記述します。
<Patterns> <Pattern PrintCallstacks = "MethodNameOnly">Method1</Pattern> <Pattern>Method2</Pattern> </Patterns>where:
Method1とMethod2- パフォーマンスデータを取得するメソッドの名前(名前の部分文字列ではない)と一致する正規表現。 メソッド名に特殊文字が含まれている場合は、バックスラッシュ\シンボルでエスケープする必要があることに注意してください。 例:MyMethod\+MySubMethodPrintCallstacks- コールスタックデータをレポートに含めることができるオプションの属性(そのようなレポートの例を 以下に示します)。PrintCallstacksには 2 つの使用可能な値があります。Full- 完全修飾メソッド名はコールスタックに表示されます。MethodNameOnly- メソッド名のみ(名前空間とクラス名を除く)が呼び出しスタックに表示されます。
ファイルを保管します。
2a。 パフォーマンスレポートを生成する
パフォーマンスレポートを生成するには
コマンドラインで次のコマンドを実行します。
Reporter.exe report <path_to_snapshot> --pattern=<path_to_pattern> --save-to=<path_to_report>where:
<path_to_snapshot>- ソーススナップショットファイルへのパス。<path_to_pattern>- レポートに追加されたメソッドの名前を含む XML パターンファイルへのパス。<path_to_report>- 結果のレポートファイルへのパス。
例えば:
レポートの例
where:
FQN- 完全なメソッド名。TotalTime- メソッドの呼び出しサブツリーの実行時間。OwnTime- メソッド自体の実行時間。Calls- 呼び出しの数。
XML パターンファイル内の特定の Pattern に対して PrintCallstacks 属性が指定されている場合、レポートには追加の呼び出しスタックデータが含まれます。 例: 一部の GetFileNames 関数に <Pattern PrintCallstacks = "MethodNameOnly"> が指定されました。 この場合、結果のレポートの対応する Function ノードには、呼び出しスタックを持つ追加の Instance サブノードが含まれます。
2b。 スナップショット差分のレポートを生成する
2 つのスナップショットを比較し、相違点に関するレポートを生成するには
コマンドラインで次のコマンドを実行します。
Reporter.exe compare <path_to_snapshot1> <path_to_snapshot2> --pattern=<path_to_pattern> --save-to=<path_to_report>where:
<path_to_snapshot1>- 参照スナップショットファイルへのパス。<path_to_snapshot2>- 2 番目のスナップショットファイルへのパス。<path_to_pattern>- レポートに追加されたメソッドの名前を含む XML パターンファイルへのパス。<path_to_report>- 結果のレポートファイルへのパス。
例えば:
結果レポートファイルは、「レポート」モードで得られるものと似ていますが、唯一の違いはすべてのフィールドに絶対時間やコール数の数ではなくスナップショット間のデルタが含まれることです。 デルタ記号に応じて、値は + または - の接頭辞で始まります。