程序如何打Dump文件

🧐 为什么要创建和分析 Dump 文件?

创建和分析 Dump 文件,主要是为了解决真正导致服务停摆或崩溃的疑难杂症,例如:

  • 进程崩溃 (Crash) :当WMS或windows_exporter进程因内存访问冲突(如 0xc0000005 错误)、未处理的异常等原因意外终止时。

  • 进程挂起 (Hang):进程仍在运行但无响应,对任何请求都停止反应。Dump 可以揭示它卡在了哪个函数或锁上。

  • 高内存占用 (High Memory Usage):分析堆(Heap)中对象的类型和数量,快速定位是哪个模块或业务逻辑导致了内存泄漏。

  • 高 CPU 占用 (High CPU Usage):通过查看即时线程的调用栈,分析是哪个函数在执行耗时操作。

🛠️ 手动诊断工具 (适用于进程运行缓慢或无响应)

这些方法主要用于对正在运行的进程进行即时"体检"。

工具 操作方法 适用场景与说明
任务管理器 (Task Manager) 1. 打开任务管理器,进入 "详细信息" 选项卡。 2. 右键点击目标进程,选择 "创建转储文件"。 优点 :最方便,系统自带。 缺点:只能生成 Full Dump,文件较大,且生成时进程会短暂挂起。
Process Explorer 1. 下载并运行 Process Explorer (来自微软官方)。 2. 右键点击目标进程,选择 "Create Dump" ,然后选择 "Create Full Dump"。 优点:比任务管理器更强大,功能更丰富,可以看作是任务管理器的"专业升级版"。
ProcDump (按需手动) 以管理员身份 打开 命令提示符 (CMD) ,定位到 procdump.exe 所在目录,执行命令按需抓取。 优点 :灵活性极高,可按需抓取,且不会终止进程。 缺点:需要下载,并使用命令行操作。

崩溃时自动抓取 (适用于进程随机崩溃)

如果你面对的问题是进程会不定时、随机地崩溃退出 ,手动抓取根本来不及,那么设置自动抓取就是唯一有效的方法。

Linux下教程

复制代码
procdump -M 2048 -n 3 -s 3 <PID或进程名>

WIndows下教程

1.下载ProcDump

Windows: 下载并解压到服务器

2.打Dump

2.1 根据内存阈值打Dump

复制代码
procdump -ma -m 1024 -n 3 -s 10 <PID或进程名> -o C:\dumps\
  • -ma:生成完整内存转储(推荐用于全面分析)。
  • -m 1024:内存超过 1024MB 时触发。

  • -n 3:最多生成 3 个 Dump。

  • -s 10:持续 10 秒超过阈值才触发。

  • -o:指定 Dump 输出目录(默认当前目录)。

2.2 根据CPU阈值打Dump

复制代码
procdump -ma -c 90 -n 3 -s 10 <PID或进程名> -o C:\dumps\
  • -c <百分比> :CPU 使用率阈值(如 -c 80 表示 CPU ≥ 80% 时触发)。

  • -s <秒>:连续超过阈值多少秒后触发(避免瞬时波动误触发)。

  • -n <次数>:最多生成的 Dump 文件数量(默认无限制)。

  • -ma:生成完整内存转储(推荐用于全面分析)。

  • -o:指定 Dump 输出目录(默认当前目录)。

eg:

在cmd窗口输入:

D:\Procdump\procdump.exe -ma -m 10240 -n 3 -s 10 8880 -o D:\Procdump\ 回车

不要关闭命令窗口,当进程 PID 8880内存达到 10240M 时,打3次dump自动保存在目录D:\Procdump\ 下.

相关推荐
1-1=034 分钟前
.NET 实现后台任务
c#·.net·.netcore·quartz·hangfire
步步为营DotNet1 小时前
从分代预算到 DATAS:.NET GC 调优到底在调什么
c#·.net·内存管理·gc·datas
淡海水1 小时前
05-03-源码-Boehm GC分配与碎片管理
开发语言·算法·unity·c#·游戏引擎·gc
曹牧1 小时前
C#:字符串占位符与值数量不一致
开发语言·数据库·c#
玩泥巴的20 小时前
MAF + 飞书:让大模型干活,但别让它乱干
ai·c#·.net·飞书·agent
cpp_w1 天前
C#基础3- 面向对象中级应用3
后端·c#
步步为营DotNet1 天前
Async 状态机要搬进运行时了:.NET 10 Runtime Async 实测,快的地方快 1.5 倍,贵的地方贵 5 倍
性能优化·c#·.net·async·runtime
hixiong1231 天前
C# 使用 ZXingCpp.Angle 进行条码、二维码识别
开发语言·c#·扫码
步步为营DotNet1 天前
System.Text.Json 源生成:三个“看起来已经生效“的静默失效
c#·.net·native aot·源生成
用户788477316342 天前
用 C# 把每周 6 小时的 PDF 录入干到 20 分钟:一份可复制的桌面 OCR 方案
c#