1.程序背景: .net core web api . 主要做MES的.
运行环境: Linux 64位
.Net版本 : .Net 6
进程守护: Supervisor
因此需要下载Linux上的dump工具,就是微软自带的dotnet-dump,以下是准备的工具.
dotnet-counters : dotnet-counters 诊断工具 - .NET CLI | Microsoft Learn
dotnet-dump : dotnet-dump 诊断工具 - .NET CLI | Microsoft Learn
windbg preview :下载 Windows 调试工具 - WinDbg - Windows drivers | Microsoft Learn
dotnet-counters 和 dotnet-dump 是放在服务器上的, 我先放到 (/usr/etc/)并给777权限
其中dotnet-counters用来简单的分析下内存占用,dotnet-dump 用来生成 dump文件
windbg 安装在自己的电脑上就行了, 主要用来分析dump文件的
2.Windbg的基本设置
1 . 在本机电脑上打开windbg设置微软公共符号
上图中的Symbol path 为
SRV*C:\mysymbols*http://msdl.microsoft.com/download/symbols
2.安装sos扩展
在本机电脑上打开cmd,执行
dotnet tool install -g dotnet-sos
然后再执行
dotnet-sos install
dotnet命令非常人性化,提示咱们用这个 .load C:\Users\H12727182\.dotnet\sos\sos.dll
命令加载sos, 这个.load命令先记录下来.将来能用到.
3. 抓取dump文件
首先找到程序的进程ID
1.直接使用
ps -ef | grep donet
2.因为上文说到程序使用supervisor来做进程守护的,所以可以使用supervisorctl status
来查看进程ID
切换到/usr/etc下,使用命令
./dotnet-counters monitor -p 18042
可以简单的看下内存占用情况
使用命令
./dotnet-dump collect -p 18042
可以生成dump文件.目前碰到的情况内存如果32G被占用完了,dump也在30G左右,所以生成的dump文件如果特别大,可以使用zip压缩一下.然后再用sftp download本地
4. 鸣谢
最后感谢一线码农在博客园分享了这么多dump,让我们这些小白也能玩玩这些高端的东西,因此自己也记录一下学习的过程
一线码农分析dump地址 : windbg - 随笔分类 - 一线码农 - 博客园 (cnblogs.com)