dotnet-dump工具使用

介绍

dotnet-dump 是 .NET Core 官方工具之一,用于生成和分析 .NET Core 进程的转储文件(dump file)。它可以帮助开发人员在应用程序发生故障或性能问题时进行故障排查和诊断。

Linux 系统上的软件包的工具

  • RedHat系列使用(Centos)yum
  • Debian系列使用apt

dotnet-dump安装

先安装dotnet-sdk

  1. 将 Microsoft 的官方包存储库配置文件安装到 CentOS 7 系统中
    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
  2. 安装运行时
    sudo yum install dotnet-sdk-7.0
  3. 查看当前版本-是否安装成功
    dotnet --version
    image

安装dotnet-dump

安装最新的即可,我的代码是asp.core3.1 也可以高版本排查
dotnet tool install --global dotnet-dump
查看当前版本-是否安装成功
dotnet-dump --version
image

生成转储文件(内存文件)

image
dotnet-dump collect -p 66745(进程编号)

分析转储文件

dotnet-dump analyze core_20240122_203904
image

分析SOS命令

  1. 找到内存比较大的类型,通过查看内存占用大小和对象数量
    dumpheap -stat
    默认从小到大,直接拉到最下面,看最大的对象
    image
    查看指定的类型
    dumpheap -type System.Byte[]
    image

  2. 然后分析类型具体对象
    dumpheap -mt 命令,您可以快速查找指定类型的对象,了解其在堆上的分布情况和内存占用情况。这对于定位内存泄漏、查找内存使用问题等非常有用。
    dumpheap -mt 7fb2d0110f90
    image

  3. 然后找出的应用根(目的是找出在哪里被引用了)
    gcroot 7f9a14da0448
    image

分析生产环境dump机器配置要高一点,4G大小的文件跑崩了

image

查询线程运行代码

clrthreads -live"clrthreads -live"命令用于显示当前正在运行的所有托管线程及其相关信息,包括线程ID、状态、堆栈跟踪、最近的异常信息等。此外,使用"-live"选项可以过滤出仍然处于活动状态的线程。
image

threads"threads"命令通常在调试器中使用,用于显示当前正在运行的所有线程的信息。
image
setthread 0"setthread"命令通常在调试器中使用,用于将调试器上下文切换到指定的线程。
clrstack -a "clrstack -a"命令用于显示当前线程的调用堆栈,包括堆栈帧和函数调用的详细信息。
image
dumpobj 0x00007fb19000dae0 通过执行"dumpobj"命令并指定对象的内存地址或变量名,您可以查看该对象的类型、字段和属性值、方法等信息。
image

posted @ 2024-01-04 00:54  广州大雄  阅读(1833)  评论(1编辑  收藏  举报