dtrace 是一個非常強大的系統追蹤工具,常用於效能分析、除錯和系統行為監控。透過其豐富的命令列選項,使用者可以靈活地定製追蹤過程,分析系統中的各類事件與行為。

suv789發表於2024-11-24

Windows 上的 DTrace - Windows drivers | Microsoft Learn

DTrace | Microsoft Learn

Download DTrace On Windows from Official Microsoft Download Center 2.0版本下載

GitHub - microsoft/DTrace-on-Windows: Code for the cross platform, single source, OpenDTrace implementation

DTrace

Windows Server 2025 配備了 dtrace 作為本機工具。 DTrace 是一款命令列實用工具,可讓使用者實時監控系統效能並排除故障。 DTrace 允許使用者動態檢測核心和使用者空間程式碼,而無需修改程式碼本身。 此多功能工具支援一系列資料收集和分析技術,如聚合、直方圖和使用者級事件跟蹤。 若要了解詳細資訊,請參閱 DTrace 獲取命令列幫助,參閱 Windows 上的 DTrace 瞭解其他功能。


dtrace 是一個強大的動態追蹤工具,廣泛用於效能分析、除錯和監控系統行為。它允許使用者以低開銷、動態的方式追蹤作業系統、應用程式和核心的執行情況。根據不同的使用場景和功能需求,dtrace 可以分為幾個主要的功能類別:

1. 系統效能分析

dtrace 可以幫助使用者分析系統的效能瓶頸,識別資源消耗大的地方。它透過動態地監控核心、程序、執行緒、檔案系統、網路等子系統的行為,幫助使用者找出系統效能問題。

  • CPU 和記憶體效能:監控 CPU 佔用情況,分析記憶體分配和釋放、快取命中率等。
  • 系統呼叫追蹤:透過 dtrace 可以追蹤系統呼叫的執行情況,幫助理解系統呼叫的效率及其對效能的影響。
  • 應用程式效能:分析應用程式執行過程中的瓶頸,幫助開發人員最佳化程式碼。

2. 動態事件追蹤

dtrace 是基於事件驅動的,透過監控核心和使用者空間的特定事件,幫助開發人員瞭解系統的執行狀態。常見的事件包括函式呼叫、記憶體分配、I/O 操作等。

  • 探針機制dtrace 使用探針(probe)來捕捉特定事件。每個探針關聯一個事件,可以是函式入口、退出,或者是特定系統呼叫的發生。
  • 事件過濾:使用者可以根據需要過濾和定製感興趣的事件,使用條件表示式和操作進行更細粒度的追蹤。

3. 故障診斷與除錯

dtrace 可以幫助開發人員定位系統中的故障和問題,尤其是在動態執行時環境下。它透過提供深入的核心和使用者空間資訊,幫助開發人員理解系統行為並進行除錯。

  • 崩潰追蹤:在程式崩潰或系統出現問題時,dtrace 可以幫助確定崩潰的原因和位置。
  • 資源洩漏檢測:透過監控記憶體分配和檔案控制代碼使用情況,dtrace 能幫助開發人員識別和修復資源洩漏問題。
  • 死鎖和競爭條件檢測:分析多執行緒或多程序程式中的死鎖或競態條件。

4. 核心級追蹤

dtrace 具有強大的核心級追蹤能力,能夠直接監控和分析作業系統核心的行為,幫助開發人員理解核心的操作和效能。

  • 核心函式呼叫追蹤:可以追蹤核心函式的呼叫情況,分析核心中的效能瓶頸或錯誤。
  • 記憶體管理追蹤:分析核心中記憶體分配、釋放和頁面交換的行為,幫助除錯記憶體管理問題。
  • 檔案系統追蹤:監控檔案系統操作,如檔案開啟、讀取、寫入等,幫助分析檔案系統的效能或錯誤。

5. 使用者空間追蹤

dtrace 不僅可以追蹤核心級事件,還可以用於監控和分析使用者空間中的程序行為。它能動態地插入探針到執行中的應用程式中,分析其行為。

  • 程序/執行緒分析:透過監控程序或執行緒的生命週期,分析其執行狀態、CPU 使用情況和資源消耗。
  • 函式級別追蹤:在使用者空間,dtrace 可以追蹤函式呼叫的入口、出口及引數,幫助開發人員進行精細化除錯和效能分析。

6. 安全性和審計

dtrace 可以作為一種安全審計工具,用於監控系統中的可疑行為,幫助分析潛在的安全問題。

  • 異常檢測:監控系統中的異常行為,如未知系統呼叫或非授權的檔案訪問,幫助及時發現潛在的安全漏洞。
  • 訪問控制審計:追蹤檔案、網路資源等訪問情況,確保系統的安全性和合規性。
  • 攻擊檢測:透過對系統資源使用情況、程序行為等的分析,檢測潛在的攻擊或惡意行為。

7. 自定義指令碼支援

dtrace 提供了強大的指令碼支援,使用者可以編寫自定義指令碼來定義複雜的事件捕獲和分析規則。D 語言是一種專門為 dtrace 設計的語言,用於編寫這些指令碼。

  • 指令碼化事件:使用者可以透過 D 語言編寫指令碼,定義在特定事件發生時要執行的操作。
  • 複雜事件檢測:透過指令碼,使用者可以定義複雜的邏輯來分析多個事件的組合,甚至基於事件的順序和時延來檢測問題。

8. 可擴充套件性和整合

dtrace 允許與其他工具和系統進行整合,增強其功能和適用範圍。

  • 與效能分析工具整合:可以與 perfvmstatiotop 等工具配合使用,提供更全面的系統效能分析。
  • 與日誌系統整合:將追蹤結果整合到日誌管理系統中,進行更長時間的歷史資料分析。
  • 支援多種作業系統dtrace 不僅支援 Solaris,還支援 macOS 和部分 Linux 發行版,具有較強的跨平臺能力。

總結:

dtrace 的功能可以大致分為以下幾類:

  1. 系統效能分析:CPU、記憶體、I/O 等資源的效能分析。
  2. 動態事件追蹤:監控和捕捉系統事件,幫助進行效能調優和故障排查。
  3. 故障診斷與除錯:定位系統和應用程式中的問題,進行深度除錯。
  4. 核心級追蹤:對作業系統核心的深入分析和除錯。
  5. 使用者空間追蹤:對執行中的應用程式進行詳細的監控。
  6. 安全性和審計:用於安全監控、異常檢測和訪問控制審計。
  7. 自定義指令碼支援:透過編寫 D 指令碼實現自定義事件捕獲與分析。
  8. 可擴充套件性和整合:支援與其他工具的整合,增強功能。

這些功能使得 dtrace 成為一個非常強大且靈活的工具,廣泛用於效能調優、故障排查、系統監控等多個領域。


dtrace -V
dtrace: Sun D 1.13.1

dtrace 命令使用說明:

Copy Code
用法: dtrace [-BCeFhlqSvVwYZ] [-b bufsz] [-c cmd] [-D name[=def]]
        [-I path] [-L path] [-o output] [-p pid] [-s script] [-U name]
        [-x opt[=val]] [-X a|c|s|t] [-y symbol path]

        [-P provider [[ predicate ] action ]]
        [-m [ provider: ] module [[ predicate ] action ]]
        [-f [[ provider: ] module: ] func [[ predicate ] action ]]
        [-n [[[ provider: ] module: ] func: ] name [[ predicate ] action ]]
        [-i probe-id [[ predicate ] action ]] [ args ... ]

        predicate -> '/' D 表示式 '/'
        action -> '{' D 語句 '}'

        -b  設定追蹤緩衝區大小
        -c  執行指定命令並在命令完成後退出
        -C  對指令碼檔案執行 ucpp 前處理器
        -D  在呼叫前處理器時定義符號
        -e  在編譯請求後但啟用探針前退出
        -f  啟用或列出匹配指定函式名的探針
        -F  按函式合併追蹤輸出
        -h  生成包含靜態探針定義的標頭檔案
        -i  啟用或列出匹配指定探針 ID 的探針
        -I  將包含目錄新增到前處理器的搜尋路徑
        -l  列出匹配指定條件的探針
        -L  將庫目錄新增到庫搜尋路徑
        -m  啟用或列出匹配指定模組名的探針
        -n  啟用或列出匹配指定探針名的探針
        -o  設定輸出檔案
        -p  獲取指定的程序 ID 並快取其符號表
        -P  啟用或列出匹配指定提供者名的探針
        -q  設定靜默模式(僅輸出明確的追蹤資料)
        -s  根據指定的 D 指令碼啟用或列出探針
        -S  列印 D 編譯器中間程式碼
        -U  在呼叫前處理器時取消定義符號
        -v  設定詳細模式(報告穩定性屬性、引數)
        -V  報告 DTrace API 版本
        -w  允許執行破壞性操作
        -x  啟用或修改編譯器和追蹤選項
        -y  設定符號搜尋路徑
        -Y  使用預設的符號搜尋路徑
        -Z  允許匹配零個探針的探針描述

引數說明:

  • -b bufsz
    設定追蹤緩衝區的大小,用於調整 dtrace 的記憶體使用。

  • -c cmd
    執行指定的命令並在其完成後退出。常用於分析特定命令的效能。

  • -C
    對指令碼檔案執行 C 前處理器處理,通常用於處理 D 語言指令碼中的宏。

  • -D name[=def]
    在呼叫前處理器時定義符號。可以用於修改指令碼的編譯行為。

  • -e
    在編譯請求後但啟用探針之前退出,通常用於驗證指令碼的正確性。

  • -f
    啟用或列出匹配指定函式名稱的探針。

  • -F
    按函式合併追蹤輸出。幫助分析函式級別的行為。

  • -h
    生成靜態探針定義的標頭檔案,用於進一步的整合或分析。

  • -i probe-id
    啟用或列出匹配指定探針 ID 的探針。

  • -I path
    向前處理器新增包含目錄,使其能夠在指定目錄中查詢標頭檔案。

  • -l
    列出匹配指定條件的探針,幫助使用者快速檢視可用的探針。

  • -L path
    向庫搜尋路徑新增目錄,使其能夠在指定的庫路徑中查詢所需的庫。

  • -m
    啟用或列出匹配指定模組名的探針。

  • -n
    啟用或列出匹配指定探針名的探針。

  • -o output
    設定輸出檔案,將追蹤資料輸出到指定檔案中。

  • -p pid
    獲取指定的程序 ID,並快取其符號表。適用於針對特定程序的追蹤。

  • -P provider
    啟用或列出匹配指定提供者名稱的探針。

  • -q
    設定為靜默模式,只輸出明確的追蹤資料,忽略其他資訊。

  • -s script
    根據指定的 D 語言指令碼啟用或列出探針。D 指令碼是 dtrace 自定義追蹤的核心。

  • -S
    列印 D 編譯器的中間程式碼,用於除錯或檢視編譯過程。

  • -U name
    在呼叫前處理器時取消定義符號,通常用於指令碼中清理符號定義。

  • -v
    啟用詳細模式,報告探針的穩定性屬性和引數資訊。

  • -V
    輸出 dtrace API 的版本資訊。

  • -w
    允許執行可能導致系統狀態改變或其他破壞性操作的命令。

  • -x opt[=val]
    啟用或修改編譯器和追蹤選項,用於自定義行為或調優效能。

  • -y symbol path
    設定符號搜尋路徑,指定搜尋符號的目錄位置。

  • -Y
    使用預設的符號搜尋路徑,通常是系統預設的庫路徑。

  • -Z
    允許匹配零個探針的探針描述。用於開發或診斷階段。

總結:

dtrace 是一個非常強大的系統追蹤工具,常用於效能分析、除錯和系統行為監控。透過其豐富的命令列選項,使用者可以靈活地定製追蹤過程,分析系統中的各類事件與行為。

dtrace
Usage: dtrace [-BCeFhlqSvVwYZ] [-b bufsz] [-c cmd] [-D name[=def]]
[-I path] [-L path] [-o output] [-p pid] [-s script] [-U name]
[-x opt[=val]] [-X a|c|s|t] [-y symbol path]

[-P provider [[ predicate ] action ]]
[-m [ provider: ] module [[ predicate ] action ]]
[-f [[ provider: ] module: ] func [[ predicate ] action ]]
[-n [[[ provider: ] module: ] func: ] name [[ predicate ] action ]]
[-i probe-id [[ predicate ] action ]] [ args ... ]

predicate -> '/' D-expression '/'
action -> '{' D-statements '}'

-b set trace buffer size
-c run specified command and exit upon its completion
-C run ucpp preprocessor on script files
-D define symbol when invoking preprocessor
-e exit after compiling request but prior to enabling probes
-f enable or list probes matching the specified function name
-F coalesce trace output by function
-h generate a header file with definitions for static probes
-i enable or list probes matching the specified probe id
-I add include directory to preprocessor search path
-l list probes matching specified criteria
-L add library directory to library search path
-m enable or list probes matching the specified module name
-n enable or list probes matching the specified probe name
-o set output file
-p grab specified process-ID and cache its symbol tables
-P enable or list probes matching the specified provider name
-q set quiet mode (only output explicitly traced data)
-s enable or list probes according to the specified D script
-S print D compiler intermediate code
-U undefine symbol when invoking preprocessor
-v set verbose mode (report stability attributes, arguments)
-V report DTrace API version
-w permit destructive actions
-x enable or modify compiler and tracing options
-y set symbol search path
-Y use default symbol search path
-Z permit probe descriptions that match zero probes

Windows Server 上進行類似於 dtrace 的操作,可以考慮以下幾個工具:

1. Windows Performance Toolkit (WPT) 和 Windows Performance Recorder (WPR)

Windows 提供了一個強大的效能分析工具集,名為 Windows Performance Toolkit (WPT),其中包括 Windows Performance Recorder (WPR) 和 Windows Performance Analyzer (WPA)。你可以用這些工具來捕獲和分析系統事件和效能瓶頸。

示例:記錄系統效能事件

  1. 啟動 Windows Performance Recorder(WPR)。
  2. 選擇 CPU UsageDisk IOMemory Usage 等跟蹤選項。
  3. 點選 Start,然後執行你想要分析的操作。
  4. 點選 Stop 完成效能取樣,結果會生成一個 .etl 檔案。
  5. 使用 Windows Performance Analyzer (WPA) 開啟 .etl 檔案進行分析。

2. Process Monitor (ProcMon)

Process Monitor 是另一個非常強大的 Windows 工具,可以用來監控檔案系統、登錄檔、程序、執行緒等事件。它類似於 dtrace 的一種資料捕獲和事件監控工具。

示例:捕獲檔案操作和登錄檔訪問

  1. 啟動 Process Monitor
  2. 配置過濾器,僅捕獲你感興趣的事件(如檔案系統操作、登錄檔訪問等)。
  3. 開始捕獲資料並執行你需要分析的操作。
  4. 停止捕獲並分析日誌。

3. Windows Debugging Tools (WinDbg)

WinDbg 是一個高階除錯工具,適用於 Windows 應用程式、核心、驅動程式等。你可以用它來進行低階別的故障排查、堆疊跟蹤和記憶體分析。

示例:使用 WinDbg 捕獲堆疊資訊

  1. 啟動 WinDbg,並連線到目標系統。
  2. 使用 !analyze -v 命令來分析崩潰轉儲檔案,或者使用 !process 命令檢視程序資訊。
  3. 除錯核心或應用程式崩潰、效能瓶頸等。

4. ETW (Event Tracing for Windows)

ETW 是 Windows 提供的一個高效的事件跟蹤機制,允許你捕獲系統級別的事件,類似於 dtrace 提供的功能。透過 ETW,你可以收集關於系統、應用程式、硬體的詳細資訊,並進行效能分析。

示例:使用 ETW 跟蹤系統呼叫

你可以透過 logmanxperf 等工具來捕獲 ETW 事件。

bashCopy Code
logman start MyTrace -p "Microsoft-Windows-Sysmon" 0xFFFFFFFF -ets

解釋:

  • logman 用於啟動 ETW 跟蹤。
  • -p "Microsoft-Windows-Sysmon" 指定跟蹤 Sysmon 提供的事件。
  • 0xFFFFFFFF 表示捕獲所有事件級別的資料。

使用 PowerShell 和 ETW:

你還可以使用 PowerShell 指令碼來啟動 ETW 跟蹤。例如,使用 New-EventTrace 命令來建立和啟動事件跟蹤會話。

5. PowerShell Performance Monitoring

Windows 還提供了內建的 PowerShell cmdlet 來進行效能監控和分析,類似於 dtrace

示例:監控 CPU 和記憶體使用情況

你可以使用 PowerShell 指令碼來定期收集 CPU 和記憶體使用情況,以下是一個簡單的指令碼:

powershellCopy Code
Get-Counter '\Processor(_Total)\% Processor Time'
Get-Counter '\Memory\Available MBytes'

示例:獲取程序資訊

powershellCopy Code
Get-Process

你可以結合 Get-EventLogGet-WinEvent 等命令,結合 ETW 提供的資訊進行更復雜的效能分析。

6. PerfView

PerfView 是由 Microsoft 提供的一個高階工具,用於分析 Windows 應用程式的效能資料。它利用 ETW 收集的事件資料,可以用來分析應用程式的 CPU 使用、垃圾回收、記憶體分配等。

示例:使用 PerfView 分析 CPU 使用情況

  1. 下載並啟動 PerfView
  2. 選擇 Collect -> Start Collection
  3. 執行你的程式,收集 CPU 使用情況。
  4. 停止收集並檢視分析結果。

7. Xperf (Windows Performance Toolkit的一部分)

Xperf 是 WPT 工具包的一部分,可以用來執行 ETW 事件收集,跟蹤 CPU 效能、記憶體使用、磁碟 I/O 等。你可以使用 Xperf 來生成高效的效能資料包告。

bashCopy Code
xperf -on latency -stackwalk profile -buffersize 1024 -maxbuffers 1024

解釋:

  • -on latency 啟動延遲分析。
  • -stackwalk profile 啟用堆疊跟蹤。
  • -buffersize 設定緩衝區大小,-maxbuffers 設定最大緩衝區數。

總結

儘管 Windows 不直接支援 dtrace,你可以使用以下工具來獲得類似的動態跟蹤和效能分析功能:

  • Windows Performance Toolkit (WPT),包括 WPR 和 WPA。
  • Process Monitor (ProcMon)
  • WinDbg
  • Event Tracing for Windows (ETW)
  • PowerShell 效能監控 cmdlet
  • PerfViewXperf

這些工具可以幫助你進行深入的效能分析和故障排查,適用於 Windows Server 系統。


相關文章