• 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

  • 相关阅读:
    HarmonyOS学习 -- ArkTS开发语言入门
    代码随想录训练营第五十七天|647. 回文子串、516.最长回文子序列
    白给的win+ubuntu双系统重新安装Ubuntu,配置ROS+深度学习开发环境全过程笔记 (一)
    c++ 沉思录笔记——句柄(第一部分)
    Vue插值操作
    SMTP 协议研究
    数据分析-numpy1
    SMV 算法【python,机器学习,算法】
    推荐几个接私活的利器
    【Linux网络编程】gdb调试技巧
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/17944357