首页 > 编程语言 >ASP.NET Core 诊断工具

ASP.NET Core 诊断工具

时间:2023-03-22 17:35:21浏览次数:50  
标签:Core ASP dump 转储 GC dotnet NET gcdump

.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

参考文档

标签:Core,ASP,dump,转储,GC,dotnet,NET,gcdump
From: https://www.cnblogs.com/RainFate/p/17244835.html

相关文章

  • 'NoneType' object has no attribute 'name'
     某个外键允许设置为空,null=True,blank=True,同时on_delete=models.SET_NULL当在Djangoadmin后台自定义标签的时候进行判断的时候,如果默认为空,提交数据库后会出现'NoneT......
  • 关于asp.net core filters生命周期的探究
    1.背景昨天看了关于一篇api限流的文章,ASP.NETCoreWebApi接口限流,作者给出了demo,写的很好,但是我看了一遍,api限流用actionfilterattribute,觉得很奇怪,难道说每次都是用的......
  • Going Deeper With Directly-Trained Larger Spiking Neural Networks
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!TheThirty-FifthAAAIConferenceonArtificialIntelligence(AAAI-21) Abstract脉冲神经网络(SNN)在时空......
  • K8s学习(一)从零开始搭建kubernetes集群环境(虚拟机/kubeadm方式)
    K8s学习(一)从零开始搭建kubernetes集群环境(虚拟机/kubeadm方式) 1Kubernetes简介(k8s)传统部署:互联网早期会直接将应用程序部署在物理机上或者虚拟操作系统中,如部署到to......
  • IIS 部署网站 Log4net日志没有写入
    前提:Log4net日志写入是开启状态,并且相关的配置文件完整无异常 可能原因:网站文件相关用户没有写入的权限操作步骤右键网站=》编辑权限=》安全=》选择User用户=》编辑=......
  • (2023版)一套教程搞定k8s安装到实战 | Kubernetes学习路线
    视频来源:B站《(2022版)最新、最全、最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定》一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ......
  • .NET Core WebApi接口ip限流实践
    .NETCoreWebApi接口ip限流实践前言之前一直想实现接口限流,但一直没去实现,然后刚好看到一篇文章是基于AspNetCoreRateLimit组件的限流策略。这个组件不做多的介绍,想了......
  • Centos安装部署netcore 包含Nginx,Supervisor等
    安装.NETCoreSDK安装libicu依赖yuminstalllibunwindlibicu注册dotnet的repository您需要注册Microsoft签名密钥并添加Microsoft产品提要sudorpm-Uvhhttps://packag......
  • .NET Core 3.0-preview3 发布
    .NETCore3.0Preview3已经发布,框架和ASP.NETCore有许多有趣的更新。这是最重要的更新列表。下载地址:​​https://aka.ms/netcore3download​​。​​.NETCore3.0......
  • .netcore 在Linux(Centos)使用Docker方式部署
    运行环境假设你已经安装好了.netcore运行环境,未配置可以看这篇​​[linux(centos)搭建.netcore运行环境]​​centos:7.2cpu:1核2G内存1M带宽docker:18.06.1-ce安装docke......