1. 程式人生 > 實用技巧 >.NET Core CLI 的效能診斷工具介紹

.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

線上檔案:https://www.yuque.com/httpreports/docs