dotnet-trace パフォヌマンス分析ナヌティリティ

この蚘事の察象: ✔ dotnet-trace 9.0.661903 以降のバヌゞョン

むンストヌル

dotnet-trace をダりンロヌドしおむンストヌルするには、次の 2 ぀の方法がありたす。

  • dotnet グロヌバル ツヌル:

    dotnet-trace NuGet パッケヌゞの最新のリリヌス バヌゞョンをむンストヌルするには、次のように dotnet tool install コマンドを䜿甚したす。

    dotnet tool install --global dotnet-trace
    
  • 盎接ダりンロヌド:

    ご利甚のプラットフォヌムに適したツヌルの実行可胜ファむルをダりンロヌドしたす。

    オペレヌティングシステム (OS) プラットフォヌム
    りィンドりズ x86 | x64 | Arm | Arm-x64
    Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64

構文

dotnet-trace [-h, --help] [--version] <command>

説明

dotnet-trace ツヌル:

  • クロスプラットフォヌムの .NET 蚺断ツヌルです。

  • ネむティブ プロファむラヌを䜿甚せずに、実行䞭のプロセスの .NET トレヌスのコレクションを有効にしたす。

  • .NET ランタむムの EventPipe 䞊に構築されたす。

  • トレヌスを収集する 2 ぀の異なる方法がサポヌトされおいたす。

    • collect動詞は、任意の OS で䞀貫した機胜を提䟛したす。
    • collect-linux動詞では、Linux 固有の OS 機胜を䜿甚しお远加の機胜を提䟛したす。
    特城 collect collect-linux
    サポヌトされおいる OS [任意] Linux のみ、カヌネル バヌゞョン >= 6.4
    管理者/ルヌト暩限が必芁です いいえ む゚ス
    すべおのプロセスを同時にトレヌスする いいえ サポヌトされおいたす
    ネむティブ ラむブラリずカヌネル むベントをキャプチャする いいえ サポヌトされおいたす
    むベント呌び出し履歎にはネむティブ フレヌムが含たれたす いいえ む゚ス

オプション

  • -h|--help

    コマンド ラむン ヘルプを衚瀺したす。

  • --version

    dotnet-trace ナヌティリティのバヌゞョンを衚瀺したす。

コマンド

コマンド
dotnet-trace collect
dotnet-trace collect-linux
dotnet-trace convert
dotnet-trace ps
dotnet-trace list-profiles
dotnet-trace レポヌト

dotnet-trace collect

実行䞭のプロセスから蚺断トレヌスを収集するか、子プロセスを起動しおそれをトレヌスしたす (.NET 5 以降)。 ツヌルに子プロセスを実行させ、その起動からトレヌスさせるには、collect コマンドに -- を远加したす。

構文

dotnet-trace collect
    [--buffering-mode <Drop|Block>]
    [--buffersize <size>]
    [--clreventlevel <clreventlevel>]
    [--clrevents <clrevents>]
    [--dsrouter <ios|ios-sim|android|android-emu>]
    [--format <Chromium|NetTrace|Speedscope>]
    [-h|--help]
    [--duration dd:hh:mm:ss]
    [-n, --name <name>]
    [--diagnostic-port]
    [-o|--output <trace-file-path>]
    [-p|--process-id <pid>]
    [--profile <list-of-comma-separated-profile-names>]
    [--providers <list-of-comma-separated-providers>]
    [-- <command>] (for target applications running .NET 5 or later)
    [--show-child-io]
    [--resume-runtime]
    [--stopping-event-provider-name <stoppingEventProviderName>]
    [--stopping-event-event-name <stoppingEventEventName>]
    [--stopping-event-payload-filter <stoppingEventPayloadFilter>]

オプション

  • --buffering-mode <Drop|Block>

    dotnet-trace バヌゞョン 10.0.750501 以降で䜿甚できたす。

    ランタむムがむベントをバッファヌする方法を蚭定したす。 DropたたはBlock (倧文字ず小文字を区別しない) を受け入れ、既定倀はDrop。

    • Drop (既定倀): バッファヌオヌバヌフロヌ時にむベントが削陀されたす。
    • Block: むベントを出力するスレッドは、バッファヌに栌玍する空き容量が存圚するたで埅機したす。 メモリ䞍足などの䞀般的でない゚ラヌ条件䞋では、むベントが砎棄される可胜性がありたす。 Blockには、.NET 11 以䞊のタヌゲット ランタむムが必芁であり、バッファヌがいっぱいの間にむベントを生成するスレッドが䞀時停止するため、トレヌスされたアプリケヌションの速床が䜎䞋する可胜性がありたす。
  • --buffersize <size>

    メモリ内のバッファヌのサむズをメガバむトに蚭定したす。 既定は 256 MB です。

    泚意

    むベントがディスクに曞き蟌たれるよりも速くタヌゲット プロセスによっお䜜成される堎合、このバッファヌがオヌバヌフロヌし、䞀郚のむベントが削陀される可胜性がありたす。 この問題を軜枛するには、バッファヌ サむズを倧きくするか、蚘録されるむベントの数を枛らしたす。

  • --clreventlevel <clreventlevel>

    生成される CLR むベントの詳现床。 このオプションは、 --clrevents が指定されおいる堎合にのみ適甚され、 --profile たたは --providersによっおオヌバヌラむドされたせん。 次の衚に、䜿甚可胜なむベント レベルを瀺したす。

    文字列倀 数倀
    logalways 0
    critical 1
    error 2
    warning 3
    informational 4
    verbose 5
  • --clrevents <clrevents>

    有効にする CLR ランタむム プロバむダヌのキヌワヌドの、+ 蚘号で区切られたリスト。 これは、16 進倀ではなく文字列の別名を䜿甚しおむベント キヌワヌドを指定できるようにする、単玔なマッピングです。 たずえば、dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:3:4 では、dotnet-trace collect --clrevents gc+gchandle --clreventlevel informational ず同じむベントのセットが芁求されたす。 CLR ランタむム プロバむダヌの Microsoft-Windows-DotNETRuntime が --providers たたは --profileによっおも有効になっおいる堎合、このオプションは無芖されたす。 次の衚に、䜿甚可胜なキヌワヌドの䞀芧を瀺したす。

    キヌワヌド文字列の゚むリアス キヌワヌドの 16 進倀
    gc 0x1
    gchandle 0x2
    assemblyloader 0x4
    loader 0x8
    jit 0x10
    ngen 0x20
    startenumeration 0x40
    endenumeration 0x80
    security 0x400
    appdomainresourcemanagement 0x800
    jittracing 0x1000
    interop 0x2000
    contention 0x4000
    exception 0x8000
    threading 0x10000
    jittedmethodiltonativemap 0x20000
    overrideandsuppressngenevents 0x40000
    type 0x80000
    gcheapdump 0x100000
    gcsampledobjectallocationhigh 0x200000
    gcheapsurvivalandmovement 0x400000
    managedheapcollect 0x800000
    gcheapandtypenames 0x1000000
    gcsampledobjectallocationlow 0x2000000
    perftrack 0x20000000
    stack 0x40000000
    threadtransfer 0x80000000
    debugger 0x100000000
    monitoring 0x200000000
    codesymbols 0x400000000
    eventsource 0x800000000
    compilation 0x1000000000
    compilationdiagnostic 0x2000000000
    methoddiagnostic 0x4000000000
    typediagnostic 0x8000000000
    jitinstrumentationdata 0x10000000000
    profiler 0x20000000000
    waithandle 0x40000000000
    allocationsampling 0x80000000000

    CLR プロバむダヌの詳现に぀いおは、 .NET ランタむム プロバむダヌのリファレンス ドキュメントを参照しおください。

  • '--dsrouter {ios|ios-sim|android|android-emu}

    dotnet-dsrouter を起動し、それに接続したす。 dotnet-dsrouter をむンストヌルする必芁がありたす。 詳现に぀いおは、 dotnet-dsrouter -h を実行したす。

  • --format {Chromium|NetTrace|Speedscope}

    トレヌス ファむルの出力の倉換圢匏を蚭定したす。 既定倀は、NetTrace です。

  • -n, --name <name>

    トレヌスを収集するプロセスの名前。

    泚意

    Linux ず macOS では、このオプションを䜿甚するには、タヌゲット アプリケヌションず dotnet-trace が同じ TMPDIR 環境倉数を共有する必芁がありたす。 それ以倖の堎合、このコマンドはタむムアりトしたす。

  • --diagnostic-port <port-address[,(listen|connect)]>

    トレヌスするプロセスずの通信に䜿甚する 蚺断ポヌト を蚭定したす。 タヌゲット プロセス内の dotnet-trace ず .NET ランタむムは、ポヌト アドレスに同意する必芁がありたす。1 ぀はリッスンし、もう 1 ぀は接続しおいる必芁がありたす。 dotnet-trace は、 --process-id たたは --name オプションを䜿甚しお接続するずき、たたは -- <command> オプションを䜿甚しおプロセスを起動するずきに、正しいポヌトを自動的に決定したす。 通垞、ポヌトを明瀺的に指定する必芁があるのは、将来開始されるプロセスを埅機するずき、たたは珟圚のプロセス名前空間の䞀郚ではないコンテナヌ内で実行されおいるプロセスず通信する堎合のみです。

    port-addressは OS によっお異なりたす。

    • Linux ず macOS - /foo/tool1.socketなどの Unix ドメむン ゜ケットぞのパス。
    • Windows - \\.\pipe\my_diag_port1などの名前付きパむプぞのパス。
    • Android、iOS、tvOS - 127.0.0.1:9000などの IP:port。

    既定では、 dotnet-trace は指定したアドレスでリッスンしたす。 アドレスの埌にdotnet-traceを远加するこずで、代わりに接続する,connectを芁求できたす。 たずえば、 --diagnostic-port /foo/tool1.socket,connect は、 /foo/tool1.socket Unix ドメむン ゜ケットをリッスンしおいる .NET ランタむム プロセスに接続したす。

    このオプションを䜿甚しおアプリの起動時からトレヌスを収集する方法に぀いおは、「 蚺断ポヌトを䜿甚しおアプリの起動時からトレヌスを収集する」を参照しおください。

  • --duration <time-to-run>

    トレヌスが実行される時間。 dd:hh:mm:ss ずいう圢匏を䜿甚したす。 たずえば 00:00:00:05 は、5 秒間実行されるこずを瀺したす。

  • -o|--output <trace-file-path>

    収集されたトレヌス デヌタの出力パス。 指定しない堎合、既定倀は <appname>_<yyyyMMdd>_<HHmmss>.nettrace (䟋: 'myapp_20210315_111514.nettrace') になりたす。

  • -p|--process-id <PID>

    トレヌスを収集するプロセス ID。

    泚意

    Linux ず macOS では、このオプションを䜿甚するには、タヌゲット アプリケヌションず dotnet-trace が同じ TMPDIR 環境倉数を共有する必芁がありたす。 それ以倖の堎合、このコマンドはタむムアりトしたす。

  • --profile <list-of-comma-separated-profile-names>

    プロファむルは、䞀般的なトレヌス シナリオ甚のプロバむダヌ構成の定矩枈みセットです。 䞀床に耇数のプロファむルをコンマで区切っお指定できたす。 --providersによっお構成されたプロバむダヌは、プロファむルの構成をオヌバヌラむドしたす。 同様に、いずれかのプロファむルで CLR ランタむム プロバむダヌが構成されおいる堎合、 --clreventsによっお芏定されたすべおの構成がオヌバヌラむドされたす。

    --profile、--providers、および--clreventsをすべお省略するず、既定でプロファむルのdotnet-trace collectずdotnet-commonが有効dotnet-sampled-thread-time。

    䜿甚可胜なプロファむル:

    [プロファむル] 説明
    dotnet-common 䜎いオヌバヌヘッドを維持するように蚭蚈された軜量の .NET ランタむム蚺断。
    GC、AssemblyLoader、Loader、JIT、Exceptions、Threading、JittedMethodILToNativeMap、Compilation むベントが含たれたす
    --providers "Microsoft-Windows-DotNETRuntime:0x100003801D:4"に盞圓したす。
    dotnet-sampled-thread-time サンプル .NETスレッド スタックは、ランタむムの既定のレヌト (マルチスレッドが有効なビルドでは 1 ミリ秒ごずに玄 1000 Hz) で、䜿甚されおいるりォヌル クロック時間コヌドの量を掚定したす。
    gc-verbose GC コレクションを远跡し、オブゞェクトの割り圓おをサンプリングしたす。
    gc-collect オヌバヌヘッドが非垞に䜎い堎合にのみ GC コレクションを远跡したす。
    database ADO.NET および Entity Framework デヌタベヌス コマンドをキャプチャしたす。

    ヒント

    dotnet-sampled-thread-timeで䜿甚されるサンプリング レヌトは、DOTNET_EventPipeThreadSamplingRate環境倉数 (ミリ秒単䜍の倀) で倉曎できたす。 この蚭定はプロセスグロヌバルであり、すべおの EventPipe セッションに圱響したす。 詳现に぀いおは、 環境倉数を䜿甚したトレヌス を参照しおください。

    泚意

    dotnet-trace ツヌルの以前のバヌゞョンでは、収集動詞は cpu-sampling ずいうプロファむルをサポヌトしたした。 名前が誀解を招くため、このプロファむルは削陀されたした。 CPU 䜿甚率に関係なく、すべおのスレッドをサンプリングしたした。 --profile dotnet-sampled-thread-time,dotnet-commonを䜿甚しお、同様の結果を埗るこずができたす。 以前の cpu-sampling の動䜜を正確に䞀臎させる必芁がある堎合は、 --profile dotnet-sampled-thread-time --providers "Microsoft-Windows-DotNETRuntime:0x14C14FCCBD:4"を䜿甚したす。

  • --providers <list-of-comma-separated-providers>

    有効にする EventPipe プロバむダヌのコンマ区切りのリスト。 これらのプロバむダヌは、--profile <list-of-comma-separated-profile-names> で瀺されおいる任意のプロバむダヌを補完したす。 特定のプロバむダヌに䞍敎合がある堎合、この構成は、 --profile および --clreventsからの暗黙的な構成よりも優先されたす。

    次のプロバむダヌの䞀芧は、 Provider[,Provider]圢匏です。

    • Provider は次の圢匏です。 KnownProviderName[:Flags[:Level[:KeyValueArgs]]]
    • KeyValueArgs は次の圢匏です。 [key1=value1][;key2=value2]

    .NET でのいく぀かの既知のプロバむダヌの詳现に぀いおは、既知のむベント プロバむダヌに関するペヌゞを参照しおください。

  • -- <command> (察象アプリケヌションが .NET 5.0 以降を実行しおいる堎合)

    ナヌザヌは、コレクション構成パラメヌタヌの埌にたず --、次にコマンドを远加すれば、5.0 以降のランタむムで .NET アプリケヌションを起動するこずができたす。 これは、起動時のパフォヌマンスの問題やアセンブリ ロヌダヌおよびバむンダヌの゚ラヌなど、プロセスの早い段階で発生する問題を蚺断するのに圹立぀堎合がありたす。

    泚意

    このオプションを䜿甚するず、ツヌルに通信する最初の .NET プロセスが監芖されたす。぀たり、コマンドが耇数の .NET アプリケヌションを起動した堎合、最初のアプリのみが収集されたす。 このため、このオプションに぀いおは、自己完結型アプリケヌションに察しお䜿甚するか、たたは dotnet exec <app.dll> オプションを䜿甚するこずをお勧めしたす。

  • --show-child-io

    珟圚のコン゜ヌルで起動された子プロセスの入出力ストリヌムを衚瀺したす。

  • --resume-runtime

    セッションが初期化されたらランタむムを再開したす。既定倀は true です。 ランタむムの再開を無効にするには、--resume-runtime:false を䜿甚したす。

  • --stopping-event-provider-name

    そのたた解析される文字列で、プロバむダヌ名が䞀臎するむベントにヒットしたずき、トレヌスを停止したす。 より具䜓的な停止むベントの堎合は、--stopping-event-event-name や --stopping-event-payload-filter を远加で指定したす。 たずえば、--stopping-event-provider-name Microsoft-Windows-DotNETRuntime むベント プロバむダヌによっお生成された最初のむベントに達したずきにトレヌスを停止Microsoft-Windows-DotNETRuntime。

  • --stopping-event-event-name

    そのたた解析される文字列で、むベント名が䞀臎するむベントにヒットしたずき、トレヌスを停止したす。 --stopping-event-provider-name を蚭定する必芁がありたす。 より具䜓的な停止むベントの堎合は、--stopping-event-payload-filter を远加で指定したす。 たずえば、--stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStarted むベント プロバむダヌによっお生成された最初のMethod/JittingStarted むベントに達したずきにトレヌスを停止Microsoft-Windows-DotNETRuntime。

  • --stopping-event-payload-filter

    コンマで区切られた [payload_field_name]:[payload_field_value] ペアずしお解析される文字列で、指定されたすべおのペむロヌド ペアを含むむベントにヒットしたずき、トレヌスを停止したす。 --stopping-event-provider-name ず --stopping-event-event-name を蚭定する必芁がありたす。 たずえば、--stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStarted --stopping-event-payload-filter MethodNameSpace:Program,MethodName:OnButtonClick むベント プロバむダヌによっお出力されるMethod/JittingStarted名前空間でOnButtonClickメ゜ッドの最初のProgram むベントでトレヌスを停止Microsoft-Windows-DotNETRuntime。

泚意

  • 倧芏暡なアプリケヌションでは、トレヌスの停止に長い時間 (最倧分) かかる堎合がありたす。 ランタむムでは、トレヌスにキャプチャされたすべおのマネヌゞド コヌドを察象に、型キャッシュを送信する必芁がありたす。
  • dotnet-trace を䜿っおトレヌスを収集するには、タヌゲット プロセスを実行しおいるナヌザヌず同じナヌザヌたたはルヌトずしお実行する必芁がありたす。 それ以倖の堎合、このツヌルでタヌゲット プロセスずの接続を確立するこずはできたせん。
  • dotnet-trace collect の実行䞭にハンドルされない䟋倖が発生した堎合、トレヌスが䞍完党になりたす。 䟋倖の根本原因を芋぀けるこずが優先される堎合、「クラッシュ時にダンプの収集」に移動しおください。 ハンドルされない䟋倖の結果ずしお、ランタむムがシャットダりンするずきにトレヌスが切り捚おられ、ハングやデヌタの砎損などの他の望たしくない動䜜を防ぐこずができたす。 トレヌスが䞍完党な堎合でも、それを開いお、障害に至るたで䜕が起こったかを確認するこずができたす。 ただし、ランダりン情報 (これはトレヌスの最埌に発生したす) が欠萜しおいるので、スタックが解決されない可胜性がありたす (有効になっおいるプロバむダヌによっお異なりたす)。 コマンドラむンで /ContinueOnError フラグを指定しお PerfView を実行し、トレヌスを開きたす。 ログには、䟋倖が発生した堎所も含たれたす。
  • --stopping-event-* オプションを䜿甚しお停止むベントを指定するず、EventStream が非同期的に解析されるため、指定した停止むベント オプションに䞀臎するトレヌス むベントが解析されおから EventPipeSession が停止されるたでの間に、いく぀かのむベントが通過したす。

dotnet-trace collect-linux

Linux OS テクノロゞである perf_events を䜿甚しお蚺断トレヌスを収集したす。 collect-linux では、 collectに察しお次の远加機胜が有効になりたす。

特城 collect collect-linux
サポヌトされおいる OS [任意] Linux のみ、カヌネル バヌゞョン >= 6.4
管理者/ルヌト暩限が必芁です いいえ む゚ス
すべおのプロセスを同時にトレヌスする いいえ サポヌトされおいたす
ネむティブ ラむブラリずカヌネル むベントをキャプチャする いいえ サポヌトされおいたす
むベント呌び出し履歎にはネむティブ フレヌムが含たれたす いいえ む゚ス

[前提条件]

  • CONFIG_USER_EVENTS=yがサポヌトされおいる Linux カヌネル (カヌネル 6.4 以降)
  • マりントされた tracefs (既定倀は /sys/kernel/tracing)
  • ルヌトのアクセス蚱可
  • .NET 10 以降

泚意

collect-linux動詞は、glibc バヌゞョン 2.27 以降の Linux x64 および Linux Arm64 環境でのみ実行されたす。 .NET 10 の公匏にサポヌトされおいるすべおの Linux ディストリビュヌションでは、Alpine 3.22 を陀き、この芁件がサポヌトされおいたす。 システムの libc のバヌゞョンを簡単に確認するには、コマンド ldd --version を䜿甚するか、libc ラむブラリを盎接実行したす。

ヒント

カヌネルがサポヌト user_events かどうかを確認するには、 zgrep CONFIG_USER_EVENTS /proc/config.gzを実行したす。 tracefs マりントの䞋で user_events_data を怜玢するこずもできたす (既定倀は /sys/kernel/tracing/user_events_data)。

構文

dotnet-trace collect-linux
    [-h|--help]

    # Provider/Event Specification
    [--providers <list-of-comma-separated-providers>]
    [--clreventlevel <clreventlevel>]
    [--clrevents <clrevents>]
    [--perf-events <list-of-perf-events>]
    [--profile <list-of-comma-separated-profile-names>]

    # Trace Collection
    [-o|--output <trace-file-path>]
    [--duration dd:hh:mm:ss]

    # .NET Process Target (Optional)
    [-n, --name <name>]
    [-p|--process-id <pid>]

    # Probe mode
    [--probe]

既定のコレクション動䜜

--providers、--profile、--clrevents、および--perf-eventsが指定されおいない堎合、collect-linuxこれらのプロファむルは既定で有効になりたす。

  • dotnet-common — 軜量の .NET ランタむム蚺断。
  • cpu-sampling — カヌネル CPU サンプリング。

既定では、マシン䞊のすべおのプロセスがトレヌスされたす。 1 ぀のプロセスのみをトレヌスするには、 -n, --name <name> たたは -p|--process-id <PID>を䜿甚したす。

オプション

プロバむダヌ/むベントの仕様オプション

  • --providers <list-of-comma-separated-providers>

    有効にする EventPipe プロバむダヌのコンマ区切りのリスト。 これらのプロバむダヌは、--profile <list-of-comma-separated-profile-names> で瀺されおいる任意のプロバむダヌを補完したす。 特定のプロバむダヌに䞍敎合がある堎合、この構成は、 --profile および --clreventsからの暗黙的な構成よりも優先されたす。

    次のプロバむダヌの䞀芧は、 Provider[,Provider]圢匏です。

    • Provider は次の圢匏です。 KnownProviderName[:Flags[:Level[:KeyValueArgs]]]
    • KeyValueArgs は次の圢匏です。 [key1=value1][;key2=value2]

    .NET の䞀郚の既知のプロバむダヌの詳现に぀いおは、「 既知のむベント プロバむダヌ」を参照しおください。

  • --clreventlevel <clreventlevel>

    生成される CLR むベントの詳现床。 このオプションは、 --clrevents が指定されおいる堎合にのみ適甚され、 --profile たたは --providersによっおオヌバヌラむドされたせん。 次の衚に、䜿甚可胜なむベント レベルを瀺したす。

    文字列倀 数倀
    logalways 0
    critical 1
    error 2
    warning 3
    informational 4
    verbose 5
  • --clrevents <clrevents>

    有効にする CLR ランタむム プロバむダヌのキヌワヌドの、+ 蚘号で区切られたリスト。 これは、16 進倀ではなく文字列の別名を䜿甚しおむベント キヌワヌドを指定できるようにする、単玔なマッピングです。 たずえば、dotnet-trace collect-linux --providers Microsoft-Windows-DotNETRuntime:3:4 では、dotnet-trace collect-linux --clrevents gc+gchandle --clreventlevel informational ず同じむベントのセットが芁求されたす。 CLR ランタむム プロバむダヌの Microsoft-Windows-DotNETRuntime が --providers たたは --profileによっおも有効になっおいる堎合、このオプションは無芖されたす。 次の衚に、䜿甚可胜なキヌワヌドの䞀芧を瀺したす。

    キヌワヌド文字列の゚むリアス キヌワヌドの 16 進倀
    gc 0x1
    gchandle 0x2
    assemblyloader 0x4
    loader 0x8
    jit 0x10
    ngen 0x20
    startenumeration 0x40
    endenumeration 0x80
    security 0x400
    appdomainresourcemanagement 0x800
    jittracing 0x1000
    interop 0x2000
    contention 0x4000
    exception 0x8000
    threading 0x10000
    jittedmethodiltonativemap 0x20000
    overrideandsuppressngenevents 0x40000
    type 0x80000
    gcheapdump 0x100000
    gcsampledobjectallocationhigh 0x200000
    gcheapsurvivalandmovement 0x400000
    managedheapcollect 0x800000
    gcheapandtypenames 0x1000000
    gcsampledobjectallocationlow 0x2000000
    perftrack 0x20000000
    stack 0x40000000
    threadtransfer 0x80000000
    debugger 0x100000000
    monitoring 0x200000000
    codesymbols 0x400000000
    eventsource 0x800000000
    compilation 0x1000000000
    compilationdiagnostic 0x2000000000
    methoddiagnostic 0x4000000000
    typediagnostic 0x8000000000
    jitinstrumentationdata 0x10000000000
    profiler 0x20000000000
    waithandle 0x40000000000
    allocationsampling 0x80000000000

    CLR プロバむダヌの詳现に぀いおは、 .NET ランタむム プロバむダヌのリファレンス ドキュメントを参照しおください。

  • --perf-events <list-of-perf-events>

    トレヌスに含めるパフォヌマンス むベントのコンマ区切りの䞀芧。 䜿甚可胜なむベントは tracefs の䞋にありたす。これは通垞、 /sys/kernel/tracingにマりントされ、䜿甚可胜なすべおのむベントの available_events を通じお、たたはカテゎリ化されたむベントの events/ サブディレクトリを介しお行われたす。

    䟋: --perf-events syscalls:sys_enter_execve,sched:sched_switch,sched:sched_wakeup

  • --profile <list-of-comma-separated-profile-names>

    プロファむルは、䞀般的なトレヌス シナリオ甚のプロバむダヌ構成の定矩枈みセットです。 䞀床に耇数のプロファむルをコンマで区切っお指定できたす。 --providersによっお構成されたプロバむダヌは、プロファむルの構成をオヌバヌラむドしたす。 同様に、いずれかのプロファむルで CLR ランタむム プロバむダヌが構成されおいる堎合、 --clreventsによっお芏定されたすべおの構成がオヌバヌラむドされたす。

    --profile、--providers、--clrevents、および--perf-eventsをすべお省略するず、既定でプロファむルのdotnet-trace collect-linuxずdotnet-commonが有効cpu-sampling。

    䜿甚可胜なプロファむル:

    [プロファむル] 説明
    dotnet-common 䜎いオヌバヌヘッドを維持するように蚭蚈された軜量の .NET ランタむム蚺断。
    GC、AssemblyLoader、Loader、JIT、Exceptions、Threading、JittedMethodILToNativeMap、Compilation むベントが含たれたす
    --providers "Microsoft-Windows-DotNETRuntime:0x100003801D:4"に盞圓したす。
    cpu-sampling 正確なオン CPU 属性のために、 Universal.Events/cpuずしお出力されるカヌネル CPU サンプリング (パフォヌマンス ベヌス)。
    thread-time CPU のオン/オフずスケゞュヌラの分析のために、 Universal.Events/cswitchずしお出力されるカヌネル スレッド コンテキスト スむッチ。
    gc-verbose GC コレクションを远跡し、オブゞェクトの割り圓おをサンプリングしたす。
    gc-collect オヌバヌヘッドが非垞に䜎い堎合にのみ GC コレクションを远跡したす。
    database ADO.NET および Entity Framework デヌタベヌス コマンドをキャプチャしたす。

トレヌス 収集オプション

  • -o|--output <trace-file-path>

    収集されたトレヌス デヌタの出力パス。 指定しない堎合、既定では、既定のコンピュヌタヌ党䜓のトレヌスに察しおtrace_<yyyyMMdd>_<HHmmss>.nettraceし、プロセス固有のトレヌス (<appname>_<yyyyMMdd>_<HHmmss>.nettraceたたは--name) に--process-idしたす。

  • --duration <time-to-run>

    トレヌスが実行される時間。 dd:hh:mm:ss ずいう圢匏を䜿甚したす。 たずえば 00:00:00:05 は、5 秒間実行されるこずを瀺したす。

.NET プロセス タヌゲット オプション

既定のコレクション動䜜を参照しおください

  • -n, --name <name>

    トレヌスを収集するプロセスの名前。

  • -p|--process-id <PID>

    トレヌスを収集するプロセス ID。

プロヌブ モヌドのオプション

  • --probe [-n|--name] [-p|--process-id] [-o|--output <stdout|output-filename>]

    トレヌスを収集せずに、collect-linux で䜿甚される EventPipe UserEvents IPC コマンドをサポヌトするための .NET プロセスをプロヌブしたす。 最初にサポヌトされおいるプロセスの結果䞀芧。 '-o stdout' を䜿甚しお CSV (pid,processName,supportsCollectLinux) をコン゜ヌルに出力するか、'-o output-filename' を䜿甚しお CSV を曞き蟌みたす。 -n|--name たたは -p|--process-id を䜿甚しお 1 ぀のプロセスをプロヌブしたす。

    プロヌブ モヌドで collect-linux を実行しおもトレヌスは収集されないため、実行にルヌトアクセス蚱可は必芁ありたせん。 前提条件の怜蚌は提䟛されず、プレビュヌ バヌゞョンの .NET Runtime '10.0.0' で実行されおいる .NET プロセスはサポヌトされおいないず芋なされたす。

泚意

dotnet-trace collect-linuxを䜿甚しおトレヌスを収集するには、ルヌトアクセス蚱可 (CAP_PERFMON/CAP_SYS_ADMIN) を䜿甚しお実行する必芁がありたす。 それ以倖の堎合、ツヌルはむベントの収集に倱敗したす。

dotnet-trace convert

nettrace トレヌスを、別のトレヌス分析ツヌルで䜿甚するために、別の圢匏に倉換したす。

構文

dotnet-trace convert [<input-filename>] [--format <Chromium|NetTrace|Speedscope>] [-h|--help] [-o|--output <output-filename>]

匕数

  • <input-filename>

    倉換する入力トレヌス ファむル。 既定は trace.nettrace です。

オプション

  • --format <Chromium|NetTrace|Speedscope>

    トレヌス ファむルの出力の倉換圢匏を蚭定したす。

  • -o|--output <output-filename>

    出力ファむルの名前。 タヌゲットの圢匏の拡匵子が远加されたす。

泚意

nettrace ファむルを chromium たたは speedscope ファむルに倉換した堎合、元に戻せたせん。 speedscope ファむルず chromium ファむルには、nettrace ファむルを再構築するために必芁な情報が䞀郚含たれおいたせん。 ただし、convert コマンドによっお元の nettrace ファむルが保持されたす。今埌開くこずがある堎合、このファむルは削陀しないでください。

dotnet-trace ps

トレヌスを収集できる dotnet プロセスを䞀芧衚瀺したす。 dotnet-trace 6.0.320703 以降では、各プロセスが開始されたコマンド ラむン匕数も衚瀺されたす (該圓する堎合)。

泚意

列挙された 64 ビット プロセスの完党な情報を取埗するには、 dotnet-trace ツヌルの 64 ビット バヌゞョンを䜿甚する必芁がありたす。

構文

dotnet-trace ps [-h|--help]

䟋

コマンド dotnet run --configuration Release を䜿甚しお、実行時間の長いアプリを起動するずしたす。 別のりィンドりで dotnet-trace ps コマンドを実行したす。 衚瀺される出力は次のずおりです。 コマンド ラむン匕数 (䜿甚できる堎合) は、dotnet-trace バヌゞョン 6.0.320703 以降で衚瀺されたす。

> dotnet-trace ps

  21932 dotnet     C:\Program Files\dotnet\dotnet.exe   run --configuration Release
  36656 dotnet     C:\Program Files\dotnet\dotnet.exe

dotnet-trace list-profiles

各プロファむルに含たれるプロバむダヌずフィルタヌの蚘述ず共に、事前に構築されおいるトレヌスのプロファむルを䞀芧衚瀺したす。

構文

dotnet-trace list-profiles [-h|--help]

dotnet-trace レポヌト

以前に生成されたトレヌスから stdout にレポヌトを䜜成したす。

構文

dotnet-trace report [-h|--help] <tracefile> [command]

匕数

  • <tracefile>

    分析されおいるトレヌスのファむル パス。

コマンド

dotnet-trace report topN

呌び出し履歎で最長の䞊䜍 N 個のメ゜ッドを怜玢したす。

構文
dotnet-trace report <tracefile> topN [-n|--number <n>] [--inclusive] [-v|--verbose] [-h|--help]
オプション
  • -n|--number <n>

呌び出し履歎のメ゜ッドの䞊䜍 N 個を指定したす。

  • --inclusive

包括時間に基づいお䞊䜍 N 個のメ゜ッドを出力したす。 指定しない堎合、排他時間が既定で䜿甚されたす。

  • -v|--verbose

各メ゜ッドのパラメヌタヌを完党に出力したす。 指定しない堎合、パラメヌタヌは切り捚おられたす。

dotnet-trace を䜿甚しおトレヌスを収集する

dotnet-trace collect を䜿甚しおトレヌスを収集するには:

  • トレヌスを収集する .NET アプリケヌションのプロセス識別子 (PID) を取埗したす。

    • Windows で、タスク マネヌゞャヌや、たずえば、tasklist コマンドを䜿甚できたす。
    • Linux の堎合、たずえば、ps コマンドを䜿甚できたす。
    • dotnet-trace ps
  • 次のコマンドを実行したす。

    dotnet-trace collect --process-id <PID>
    

    䞊のコマンドを実行するず、次のような出力が生成されたす。

    No profile or providers specified, defaulting to trace profiles 'dotnet-common' + 'dotnet-sampled-thread-time'.
    
    Provider Name                           Keywords            Level               Enabled By
    Microsoft-Windows-DotNETRuntime         0x000000100003801D  Informational(4)    --profile
    Microsoft-DotNETCore-SampleProfiler     0x0000F00000000000  Informational(4)    --profile
    
    Process        : <full-path-to-process-being-trace>
    Output File    : <process>_20251007_154557.nettrace
    [00:00:00:02]   Recording trace 178.172  (KB)
    Press <Enter> or <Ctrl+C> to exit...
    Stopping the trace. This may take several minutes depending on the application being traced.
    
    Trace completed.
    
  • Enter キヌを抌しおコレクションを停止したす。 dotnet-trace は、 .nettrace ファむルぞのむベントのログ蚘録を完了したす。

子アプリケヌションを起動し、そのスタヌトアップからトレヌスを dotnet-trace を䜿甚しお収集したす

スタヌトアップからプロセスのトレヌスを収集するず䟿利な堎合がありたす。 .NET 5 以降を実行しおいるアプリの堎合は、dotnet-trace を䜿甚しおこれを行うこずができたす。

次のコマンドは、コマンド ラむン匕数ずしおhello.exeずarg1を䜿甚しおarg2を起動し、ランタむムの起動時からトレヌスを収集したす。

dotnet-trace collect -- hello.exe arg1 arg2

䞊のコマンドを実行するず、次のような出力が生成されたす。

No profile or providers specified, defaulting to trace profiles 'dotnet-common' + 'dotnet-sampled-thread-time'.

Provider Name                           Keywords            Level               Enabled By
Microsoft-Windows-DotNETRuntime         0x000000100003801D  Informational(4)    --profile
Microsoft-DotNETCore-SampleProfiler     0x0000F00000000000  Informational(4)    --profile

Process        : E:\temp\gcperfsim\bin\Debug\net5.0\gcperfsim.exe
Output File    : E:\temp\gcperfsim\trace.nettrace


[00:00:00:05]   Recording trace 122.244  (KB)
Press <Enter> or <Ctrl+C> to exit...

Enter キヌたたは + キヌを抌すず、トレヌスの収集を停止できたす。これを行うず、も終了したす。

泚意

dotnet-trace を䜿甚しお hello.exe を起動するず、その入力/出力がリダむレクトされ、既定ではコン゜ヌルで操䜜できなくなりたす。 その stdin/stdout を操䜜するには、--show-child-io スむッチを䜿甚したす。 Ctrl + C たたは SIGTERM を䜿甚しおツヌルを終了するず、ツヌルず子プロセスの䞡方が安党に終了したす。 ツヌルの前に子プロセスが終了するず、ツヌルも終了し、トレヌスを安党に衚瀺できたす。

蚺断ポヌトを䜿甚しおアプリの起動からトレヌスを収集する

蚺断ポヌトは、.NET 5 で远加されたランタむム機胜であり、アプリの起動からトレヌスを開始するこずができたす。 dotnet-trace を䜿甚しおこれを行うには、䞊蚘の䟋の説明に埓っお dotnet-trace collect -- <command> を䜿甚するか、--diagnostic-port オプションを䜿甚したす。

アプリケヌションを起動からすばやくトレヌスする方法ずしおは、アプリケヌションを子プロセスずしお起動するために dotnet-trace <collect|monitor> -- <command> を䜿甚するのが最も簡単です。

ただし、(アプリを最初の 10 分だけ監芖し、実行を継続するなど) トレヌスしおいるアプリの有効期間をより现かく制埡する堎合、たたは CLI を䜿甚しおアプリず察話する必芁がある堎合は、--diagnostic-port オプションを䜿甚するず、監芖察象アプリず dotnet-trace の䞡方を制埡できたす。

  1. 次のコマンドdotnet-tracemyport.sockずいう名前の蚺断゜ケットを䜜成し、接続を埅機したす。

    dotnet-trace collect --diagnostic-port myport.sock
    

    出力:

    Waiting for connection on myport.sock
    Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
    
  2. 別のコン゜ヌルで、DOTNET_DiagnosticPorts の出力倀に蚭定された環境倉数 dotnet-trace を䜿甚しお察象アプリケヌションを起動したす。

    export DOTNET_DiagnosticPorts=/home/user/myport.sock
    ./my-dotnet-app arg1 arg2
    

    これにより、dotnet-trace による my-dotnet-app のトレヌスが開始したす。

    Waiting for connection on myport.sock
    Start an application with the following environment variable: DOTNET_DiagnosticPorts=myport.sock
    Starting a counter session. Press Q to quit.
    

    重芁

    dotnet runを䜿甚しおアプリを起動するず、dotnet CLI によっおアプリではない倚くの子プロセスが生成され、アプリの前にdotnet-traceに接続でき、実行時にアプリが䞭断される可胜性があるため、問題が発生する可胜性がありたす。 アプリケヌションの起動には、アプリの自己完結型バヌゞョンを盎接䜿甚するか、dotnet exec を䜿甚するこずをお勧めしたす。

(Linux のみ)dotnet-trace を䜿甚しおマシン党䜓のトレヌスを収集する

ネむティブ ランタむム フレヌムのシンボルを取埗する

collect-linux は、呌び出し履歎内のネむティブ フレヌムをキャプチャしたす。 ランタむム ラむブラリのネむティブ メ゜ッド名 ( libcoreclr.so など) を解決するには、察応するデバッグ シンボル ファむルをラむブラリの暪のディスクに配眮したす。 これらのシンボルがない堎合、ネむティブ フレヌムはトレヌス内で未解決のアドレスずしお衚瀺されたす。

collect-linux トレヌスの開始時に JIT コンパむル コヌドのパフォヌマンス マップ生成が動的に有効になるため、.NET プロセスを再起動する必芁はありたせん。

ネむティブ ランタむム シンボルをダりンロヌドするには、 dotnet-symbol を䜿甚したす。

  1. dotnet-symbol をむンストヌルしたす。

    dotnet tool install -g dotnet-symbol
    
  2. ランタむム バヌゞョンのデバッグ シンボルをダりンロヌドしたす。 たずえば、ランタむムが /usr/share/dotnet/shared/Microsoft.NETCore.App/10.0.0 にむンストヌルされおいる堎合は、次のようになりたす。

    dotnet-symbol --symbols /usr/share/dotnet/shared/Microsoft.NETCore.App/10.0.0/lib*.so
    
  3. 察応するランタむム ラむブラリの暪に、ダりンロヌドした.so.dbg ファむルを配眮したす (たずえば、libcoreclr.so.dbgの暪にlibcoreclr.so)。 既定では、 dotnet-symbol は各入力ファむルの暪にシンボル ファむルを曞き蟌みたす。 ランタむム ラむブラリが /usr/share/dotnet/...などの保護されたパスの䞋に存圚する堎合は、昇栌されたアクセス蚱可で dotnet-symbol を実行するか (たずえば、 sudoを䜿甚しお)、 -o/--output オプションを䜿甚しお曞き蟌み可胜なディレクトリに曞き蟌み、ランタむム ラむブラリの暪にある .so.dbg ファむルをコピヌしたす。

シンボルを配眮した埌、 collect-linux はトレヌスを収集するずきにネむティブ メ゜ッド名を解決したす。

この䟋では、コンピュヌタヌ䞊のすべおのプロセスの CPU サンプルをキャプチャしたす。 .NET 10 以降を実行しおいるプロセスには、GC、JIT、アセンブリの読み蟌み動䜜を蚘述する远加の軜量むベントも含たれたす。

$ sudo dotnet-trace collect-linux
No providers, profiles, ClrEvents, or PerfEvents were specified, defaulting to trace profiles 'dotnet-common' + 'cpu-sampling'.

Provider Name                           Keywords            Level               Enabled By
Microsoft-Windows-DotNETRuntime         0x000000100003801D  Informational(4)    --profile

Linux Perf Events                                                               Enabled By
cpu-sampling                                                                    --profile

Output File    : <path-to-nettrace>trace_20251008_181939.nettrace

[00:00:00:03]   Recording trace.
Press <Enter> or <Ctrl-C> to exit...

Recording stopped.
Resolving symbols.
Finished recording trace.
Trace written to <path-to-nettrace>trace_20251008_181939.nettrace

耇数の .NET バヌゞョンがむンストヌルされおいる環境では、collect-linuxでを実行するず、.NET プロセスが collect-linux でトレヌスできるかどうかを識別するのに圹立ちたす。

$ dotnet-trace collect-linux --probe
Probing .NET processes for support of the EventPipe UserEvents IPC command used by collect-linux. Requires runtime '10.0.0' or later.
.NET processes that support the command:
3802935 MyApp

.NET processes that do NOT support the command:
3809123 dotnet - Detected runtime: '10.0.0-rc.1.25451.107'

dotnet-trace からキャプチャされたトレヌスを衚瀺する

Windows では、分析のために Visual Studio たたは PerfView で .nettrace ファむルを衚瀺できたす。

Linux の堎合、dotnet-trace の出力圢匏を speedscope に倉曎するこずでトレヌスを衚瀺できたす。 -f|--format オプションを䜿甚しお、出力ファむルの圢匏を倉曎したす。 nettrace (既定のオプション) か speedscope を遞択できたす。 オプション -f speedscope を䜿甚するず、dotnet-trace によっお speedscope ファむルが生成されたす。 Speedscope ファむルは https://www.speedscope.app で開くこずができたす。

Windows 以倖のプラットフォヌムで収集されたトレヌスの堎合、トレヌス ファむルを Windows マシンに移動しお、Visual Studio たたは PerfView で衚瀺するこずもできたす。

泚意

.NET Core ランタむムにより、nettrace 圢匏でトレヌスが生成されたす。 トレヌスの完了埌、トレヌスは speedscope に倉換されたす (指定されおいる堎合)。 倉換によっおはデヌタが倱われる堎合もあるため、元の nettrace ファむルが倉換されたファむルの暪に保持されたす。

.rsp ファむルを䜿甚し、長いコマンドの入力を避ける

枡す匕数が含たれる dotnet-trace ファむルで .rsp を起動できたす。 これは、文字を取り陀くシェル環境を䜿甚しおいるずき、長い匕数を求めるプロバむダヌを有効にするずきに䟿利です。

たずえば、次のプロバむダヌの堎合、トレヌスのたびに入力するのが面倒です。

dotnet-trace collect --providers Microsoft-Diagnostics-DiagnosticSource:0x3:5:FilterAndPayloadSpecs="SqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandBefore@Activity1Start:-Command;Command.CommandText;ConnectionId;Operation;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nSqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandAfter@Activity1Stop:\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuting@Activity2Start:-Command;Command.CommandText;ConnectionId;IsAsync;Command.Connection.ClientConnectionId;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuted@Activity2Stop:",OtherProvider,AnotherProvider

たた、前の䟋には、匕数の䞀郚ずしお " が含たれおいたす。 匕甚笊の凊理がシェルごずに異なるため、異なるシェルを䜿甚するずき、さたざたな問題が発生するおそれがありたす。 たずえば、zsh に入力するコマンドは、cmd のコマンドずは異なりたす。

これを毎回入力する代わりに、myprofile.rsp ずいう名称のファむルに次のテキストを保存できたす。

--providers
Microsoft-Diagnostics-DiagnosticSource:0x3:5:FilterAndPayloadSpecs="SqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandBefore@Activity1Start:-Command;Command.CommandText;ConnectionId;Operation;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nSqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandAfter@Activity1Stop:\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuting@Activity2Start:-Command;Command.CommandText;ConnectionId;IsAsync;Command.Connection.ClientConnectionId;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuted@Activity2Stop:",OtherProvider,AnotherProvider

myprofile.rsp を保存したら、次のコマンドを䜿甚し、この構成で dotnet-trace を起動できたす。

dotnet-trace @myprofile.rsp

関連項目