今天介紹一個新的診斷工具 dotnet-gcmon, 也是全域性 .NET CLI 工具, 它可以監控到 .NET 程式的 GC, 能獲取到的資訊也很詳細, 另外 maoni 大佬也是其中的開發者之一。
安裝 gcmon
和其他的 dotnet 診斷工具一樣, 你可以使用以下命令,進行全域性安裝
dotnet tool install -g dotnet-gcmon
引數介紹
引數 | 描述 |
---|---|
n | 程式名, dotnet 應用的程式名 |
p | 程式ID, dotnet 應用的 Process ID |
m | 最小 GC 暫停持續時間(以毫秒為單位),可選 |
c | 指定一個 yaml 配置檔案路徑, 可選 |
使用
使用非常簡單, 我們需要指定被監控的 dotnet 應用的程式名或者是程式ID (PID), 這裡也可以使用另外一個診斷工具 dotnet-trace, 安裝命令如下
dotnet tool install -g dotnet-trace
然後執行 dotnet trace ps
獲取所有的 dotnet 程式
接下來, 執行 dotnet gcmon -p 21904
, 開始監控 dotnet 應用, 診斷工具會輸出下面的資訊
在診斷工具執行的時候, 按下 s
鍵, 會輸出當前 GC 的整體和每一代的狀態
另外還可以使用 yaml 配置檔案, 靈活配置診斷工具輸出列,具體可以參考 github。
總結
dotnet gcmon 是一個小而實用的診斷工具, 並且還在迭代中, 在對於程式碼無侵入的情況下, 排查問題還是很方便的, 另外 .NET 現在已經有近十個診斷工具了!
gcmon 的工作原理是什麼呢? 其實主要是呼叫了 CLR 執行時團隊提供的一個診斷庫, Microsoft.Diagnostics.NETCore.Client
, 這個庫功能就非常強大了, 各種執行時資訊都可以拿到, 當然你也可以用它實現一個診斷工具, 這個庫是基於 EventPipe, IPC 等實現的, 還是很複雜的, 最後希望本文對您有用!