.NET Core CLI 的效能診斷工具介紹
前言
開發人員的.NET Core專案上線後,經常會出現各種問題,記憶體洩漏,CPU 100%,處理時間長等, 這個時候就需要快速並準確的發現問題,並解決問題, 除了專案本身的日誌記錄外,NET Core 為我們開發人員提供了一系列功能強大並且無侵入的診斷工具,本文主要介紹的是 .NET Core dotnet 診斷全域性工具
先決條件
支援.NET Core 3.0 SDK 及更高版本, .NET Core 命令列介面 (CLI) 工具
dotnet-counters
dotnet-counters 是一個效能監視工具,用於臨時執行狀況監視和初級效能調查, 你可以通過命令檢視和儲存,當前程式的執行時資訊,它可以收集 CPU,記憶體,GC,執行緒,異常 等資訊
安裝 dotnet-counters
dotnet tool install --global dotnet-counters
主要命令
- dotnet-counters collect
- dotnet-counters list
- dotnet-counters monitor
- dotnet-counters ps
dotnet-counters ps
顯示可監視的 dotnet 程式的列表, 我本地顯示有兩個.Net Core的程式在執行,前面的數字是程式ID
dotnet-counters list
這個命令我們可以看到程式的執行時資訊,和Web主機執行資訊
- 執行時:CPU 記憶體 GC 異常 執行緒數 異常資訊...
- Web主機: QPS 每秒請求數量, 當前請求數量和失敗請求數量
dotnet-counters monitor
這個命令可以實時監控程式的執行資訊
//以 3 秒的重新整理間隔監視 System.Runtime 執行時資訊
dotnet-counters monitor --process-id 19072 --refresh-interval 3 System.Runtime
//以 3 秒的重新整理間隔監視 Web主機 執行資訊
dotnet-counters monitor --process-id 19072 --refresh-interval 3 Microsoft.AspNetCore.Hosting
dotnet-counters collect
定期收集所選計數器的值,並將它們匯出為指定的檔案格式以進行後續處理。
// 以 3 秒的重新整理間隔時間收集所有計數器的值,並生成 json 輸出檔案:
dotnet-counters collect --process-id 19072 --refresh-interval 3 --format json
dotnet-dump
dotnet-dump是效能收集和分析實用工具,流程是先用 dotnet-dump collect
命令 收集當前程式的執行時資訊,然後通過 dotnet-dump analyze
命令啟動互動式 shell命令,來分析程式。
安裝 dotnet-dump
dotnet tool install -g dotnet-dump
主要命令
- dotnet-dump collect
- dotnet-dump analyze
dotnet-dump collect
// 捕獲並寫入
dotnet-dump collect --process-id 19072
執行完成後,可以在當前命令列目錄中,找到儲存的檔案,複製檔名,然後使用 dotnet-dump analyze
命令開始分析
dotnet-dump analyze
// 讀取檔案,並啟動互動式shell開始分析
dotnet-dump collect --process-id 19072
輸入 help 可以檢視所有的命令,這裡我想獲取託管程式碼的堆疊資訊,輸入 clrstack
dotnet-trace
dotnet-trace 是一個跨平臺的 .NET Core 工具,在不使用本機探查器的情況下啟用正在執行的程式的 .NET Core 跟蹤集合,
它是圍繞 .NET Core 執行時的跨平臺 EventPipe 技術而構建的,在 Windows、Linux 或 macOS 上提供相同體驗。
安裝 dotnet-trace
dotnet tool install --global dotnet-trace
主要命令
- dotnet-trace collect
- dotnet-trace convert
- dotnet-trace ps
- dotnet-trace list-profiles
dotnet-trace ps
此命令,列出可附加到的 dotnet 程式,我們一般需要拿到程式Id
dotnet-trace collect
dotnet-trace collect --process-id 20196
開始實時獲取資訊
執行後,資料收集到 trace.nettrace 檔案, 按 鍵停止收集, 可以用 PerfView 開啟,我是直接用 VS 開啟的,可以看到收集到的資料還是比較全面的。
總結
微軟提供了一套強大的診斷工具,熟練的使用這些工具,可以更快更有效的發現程式的執行問題,解決程式的效能問題。
參考檔案:https://docs.microsoft.com/zh-cn/dotnet/core/diagnostics/dotnet-counters
打個廣告
HttpReports 是針對.Net Core 開發的輕量級APM系統, 基於MIT開源協議,主要支援了統計,分析,告警,鏈路監控,請求日誌等, 檔案齊全,前段時間也是很榮幸的加入到了 .NET Core Community 組織,目前在準備V2.0版本的釋出計劃, 開源不易,還希望感興趣的同學可以點個 Star 關注下,謝謝
Github地址:https://github.com/dotnetcore/HttpReports
線上預覽: https://moa.hengyinfs.com
賬號: admin 密碼 123456