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-api実行中のアプリケーションに
PID=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.dtp実行中のアプリケーションに
PID=1234でアタッチし、サンプリングプロファイリングタイプを使用してプロファイリングするには:./dotTrace.sh attach 1234 --save-to=./snapshots/snapshot.dtp使用可能なオプションの完全なリストを表示するには、引数なしでツールを実行します。
./dotTrace.sh
プロファイルされたアプリケーションの動作が完了すると、コマンドラインプロファイラーがパフォーマンススナップショットを自動的に保存します。
標準入力またはファイルを使用してプロファイリングセッションを制御する
場合によっては、プロファイリングプロセスを直接制御する必要があります。たとえば、直接コマンドで正確な瞬間にスナップショットを取得する必要があります。これは次の方法で実行できます。
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\dotTrace[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 コマンドラインツールを .NETCore グローバルおよびローカルツールとしてインストールして使用できます。
dotTrace コマンドラインツールをインストールする
dotTrace コマンドラインツールをグローバル .NETCore ツールとしてデフォルトの場所にインストールするには、次のコマンドラインを実行します。
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>- 結果のレポートファイルへのパス。
例:
結果レポートファイルは、「レポート」モードで得られるものと似ていますが、唯一の違いはすべてのフィールドに絶対時間やコール数の数ではなくスナップショット間のデルタが含まれることです。デルタ記号に応じて、値は + または - の接頭辞で始まります。
関連ページ:
API を使用したプロファイリングセッションの制御
プロファイリング API は、プロファイリングプロセスを制御できるようにする多数のクラスを提供します。例: アプリケーションのコードから、次のことができます。プロファイリングデータの収集を開始する:,、データ収集を停止する:,、データをディスクに保存する:,、その他、API クラスの詳細については、API 参照を参照してください。プロファイリング API を使用する必要がある主なシナリオは 2 つあります。コードの特定部分のプロファイリング、自己プロファイルアプリケーション。コードの特定の部分をプ...
.NET コードのパフォーマンスプロファイリング
パフォーマンスプロファイリングの目的は、アプリケーションのパフォーマンス問題の原因を見つけることです。これには、たとえば、「最も遅い方法は何ですか ? 」という単純な質問が含まれます。CPU 不足、ガベージコレクションのブロッキング、ディスク I/O、その他の問題に関連するパフォーマンスのボトルネックのより複雑な分析も可能です。JetBrains Rider は dotTrace プロファイラーと統合して、.NET アプリケーションのパフォーマンスプロファイリングを提供します。プロファイラーは、do...