dotnet-dump工具使用
介绍
dotnet-dump 是 .NET Core 官方工具之一,用于生成和分析 .NET Core 进程的转储文件(dump file)。它可以帮助开发人员在应用程序发生故障或性能问题时进行故障排查和诊断。
Linux 系统上的软件包的工具
- RedHat系列使用(Centos)
yum
- Debian系列使用
apt
dotnet-dump安装
先安装dotnet-sdk
- 将 Microsoft 的官方包存储库配置文件安装到 CentOS 7 系统中
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
- 安装运行时
sudo yum install dotnet-sdk-7.0
- 查看当前版本-是否安装成功
dotnet --version
安装dotnet-dump
安装最新的即可,我的代码是asp.core3.1 也可以高版本排查
dotnet tool install --global dotnet-dump
查看当前版本-是否安装成功
dotnet-dump --version
生成转储文件(内存文件)
dotnet-dump collect -p 66745(进程编号)
分析转储文件
dotnet-dump analyze core_20240122_203904
分析SOS命令
-
找到内存比较大的类型,通过查看内存占用大小和对象数量
dumpheap -stat
默认从小到大,直接拉到最下面,看最大的对象
查看指定的类型
dumpheap -type System.Byte[]
-
然后分析类型具体对象
dumpheap -mt 命令,您可以快速查找指定类型的对象,了解其在堆上的分布情况和内存占用情况。这对于定位内存泄漏、查找内存使用问题等非常有用。
dumpheap -mt 7fb2d0110f90
-
然后找出的应用根(目的是找出在哪里被引用了)
gcroot 7f9a14da0448
分析生产环境dump机器配置要高一点,4G大小的文件跑崩了
查询线程运行代码
clrthreads -live
"clrthreads -live"命令用于显示当前正在运行的所有托管线程及其相关信息,包括线程ID、状态、堆栈跟踪、最近的异常信息等。此外,使用"-live"选项可以过滤出仍然处于活动状态的线程。
threads
"threads"命令通常在调试器中使用,用于显示当前正在运行的所有线程的信息。
setthread 0
"setthread"命令通常在调试器中使用,用于将调试器上下文切换到指定的线程。
clrstack -a
"clrstack -a"命令用于显示当前线程的调用堆栈,包括堆栈帧和函数调用的详细信息。
dumpobj 0x00007fb19000dae0
通过执行"dumpobj"命令并指定对象的内存地址或变量名,您可以查看该对象的类型、字段和属性值、方法等信息。