.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 文件, 按
總結
微軟提供了一套強大的診斷工具,熟練的使用這些工具,可以更快更有效的發現程式的運行問題,解決程式的性能問題。
參考文檔://docs.microsoft.com/zh-cn/dotnet/core/diagnostics/dotnet-counters
打個廣告
HttpReports 是針對.Net Core 開發的輕量級APM系統, 基於MIT開源協議,主要支援了統計,分析,告警,鏈路監控,請求日誌等, 文檔齊全,前段時間也是很榮幸的加入到了 .NET Core Community 組織,目前在準備V2.0版本的發布計劃, 開源不易,還希望感興趣的同學可以點個 Star 關注下,謝謝
Github地址://github.com/dotnetcore/HttpReports
在線預覽: //moa.hengyinfs.com
帳號: admin 密碼 123456
在線文檔://www.yuque.com/httpreports/docs