ASP.NET Core 診斷工具

.NET Core 診斷全局工具

.NET Core診斷工具官方地址

dotnet-counters

dotnet-counters 是一個性能監視工具,用於初級運行狀況監視和性能調查。 它通過 EventCounter API 觀察已發佈的性能計數器值。 例如,可以快速監視 CPU 使用情況或 .NET Core 應用程序中的異常率等指標。

dotnet-dump

通過 dotnet-dump 工具,可在不使用本機調試器的情況下收集和分析 Windows 和 Linux 核心轉儲。

dotnet-gcdump

dotnet-gcdump 工具可用於爲活動 .NET 進程收集 GC(垃圾回收器)轉儲。

dotnet-trace

分析數據通過 .NET Core 中的 EventPipe 公開。 通過 dotnet-trace 工具,可以使用來自應用的有意思的分析數據,這些數據可幫助你分析應用運行緩慢的根本原因。

dotnet-stack

使用 dotnet-stack 工具可以快速打印正在運行的 .NET 進程中的所有線程的託管堆棧。

dotnet-symbol

dotnet-symbol 用於下載打開核心轉儲或小型轉儲所需的文件(符號、DAC/DBI、主機文件等)。 如果需要使用符號和模塊來調試在其他計算機上捕獲的轉儲文件,請使用此工具。

dotnet-sos

dotnet-sos 在 Linux 和 macOS(如果使用的是 Windbg/cdb,則在 Windows 上)安裝 SOS調試擴展

PerfCollect

PerfCollect 是一個 bash 腳本,可用於收集包含 perfLTTng 的跟蹤,以便更深入地分析在 Linux 分發版上運行的 .NET 應用的性能。

dotnet-dump

生成Dump

Windows

Docker

docker exec -it dockername /bin/bash
find /usr/share -name createdump
/usr/share/dotnet/shared/Microsoft.NETCore.App/3.1.0/createdump 1
docker cp dockername:/tmp/coredump.1 ./

如果出現以下信息:
Writing minidump with heap to file /tmp/coredump.1 ptrace(ATTACH, 1) FAILED Operation not permitted
說明沒有權限,需要在docker run的時候帶上命令 --privileged=true 獲取到root權限

dotnet-dump

參考文檔

#安裝dotnet-dump
dotnet tool install --global dotnet-dump
# 10504 是進程ID
dotnet-dump collect -p 10504 -o 20221228.dump

procdump

下載地址

#ma參數後面接進程名稱或ID
procdump -ma ConsoleApp2 -o F:\Download
procdump -ma ConsoleApp2 -o F:\Download
procdump -ma 4572  F:\Download
#設置 procdump 在內存超過 1G 的時候自動抓取全內存 dump
procdump -m 1024 -ma ConsoleApp2 -o F:\Download

分析Dump

dotnet-dump

參考文檔:

dotnet-dump analyze語法:

dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]
  • dump_path:指定要分析的轉儲文件的路徑
  • -c <debug_command>:指定要在啓動時在 shell 中運行的命令
#查詢的數據列表是 數量和字節數
dotnet-dump analyze 20221228.dump  #使用 dotnet-dump 工具分析轉儲
dotnet-dump analyze   coredump2  --command    dumpheap -mt 00007f7740950f90 >>   F:\op.txt  #數量過多寫入文本
eeheap -gc #查看gc堆大小
eeheap -loader
dumpheap -stat  或 dg gen2     #查看的是託管堆的整體狀態
dumpheap -stat -min 1024       #查看大於1M的數據
dumpheap -mt 00007fceeffd0f90  #使用 dumpheap 命令來獲取所有 String 實例的列表
dumpheap -mt 00007f77464439e0  0   00007f71302cdd60 #最後一個參數是指其中的一個數據,代表找到此數據後停止往下搜索
dumpheap -mt 00007f15c4d914c0 -min 1024
do 00007f7740950f90    #顯示有關指定地址處的對象的信息
gcroot 00007f718a8dcd78  #查看對象引用鏈
gcroot -all 00007f5481592d58   #查看對象所有引用鏈
clrstack  00007f718a8dcd78 #列出正在運行的託管線程
clrstack -all  00007f718a8dcd78 
clrthreads  #僅提供託管代碼的堆棧跟蹤
gcwhere  00007f718a8dcd78  #顯示傳入參數在 GC 堆中的位置。
dso  00007f718a8dcd78 #顯示在當前堆棧的邊界內找到的所有託管對象
objsize 00007f71302b6408 #查看對象大小。選擇gcroot HandleTable下的對象

dotnet-sos配合使用

sos DumpStackObjects  00007f718a8dcd78

dotnet-gcdump

簡介

dotnet-gcdump適用於 3.1.57502 版本及更高版本

dotnet-gcdump工具可用於爲活動 .NET 進程收集 GC(垃圾回收器)轉儲。

dotnet-gcdump全局工具使用 EventPipe 收集實時 .NET 進程的 GC(垃圾回收器)轉儲。創建 GC 轉儲時需要在目標進程中觸發 GC、開啓特殊事件並從事件流中重新生成對象根圖。此過程允許在進程運行時以最小的開銷收集 GC 轉儲。

這些轉儲對於以下幾種情況非常有用:

  • 比較多個時間點堆上的對象數。
  • 分析對象的根(回答諸如“還有哪些引用此類型的內容?”等問題)。
  • 收集有關堆上的對象計數的常規統計信息。

生成GCDump

#安裝dotnet-gcdump
dotnet tool install --global dotnet-gcdump

gcdump collect語法:

  • -p 指定應用程序進程
  • -o 指定 gcdump 文件輸出路徑,默認爲.YYYYMMDD_HHMMSS_<pid>.gcdump文件
  • -v 傳入 true 或 false 默認爲 false 如果傳入 true 將會輸出更多調試信息
  • -t 超時時間,單位是秒,默認是30秒

生成gcdump,1是進程ID

dotnet-gcdump collect -p 1
dotnet-gcdump collect -p 1  -o  f:/net_20221227.gcdump

列出可收集 GC 轉儲的 dotnet 進程

dotnet-gcdump ps

查看堆棧報告

  • 使用 Visual Studio打開生成的GC文件查看報告

img

  • dotnet-gcdump report查看
#通過GC文件生成
dotnet-gcdump report 20221227.gcdump
#通過進程ID生成
dotnet-gcdump report -p 1

dotnet-counters

參考文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章