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

参考文档

posted @ 2023-03-22 17:27  雨水的命运  阅读(327)  评论(0编辑  收藏  举报