有时候我们需要系统dump来分析系统或SQL或其他组件的问题,如何手动获取系统dump呢?
一、设置 Dump 类型
1. Windows Server 2016+ (Active Dump)
-
目标:生成完整内存转储(
.dmp
文件大小 ≈ 物理内存占用)。 - 配置方法:
- 打开 事件查看器 > Windows 日志 > 系统。
- 右键 Microsoft-Windows-Kernel-MemoryManager/Operational > 属性。
- 在 转储设置 中选择 主动转储,并指定存储路径(如
C:\DumpFiles
)。
2. Windows Server 2012/R2 (Kernel Dump)
- 目标:生成内核级转储(文件较小,约占用内存的 25%-50%)。
- 配置方法:
reg add "HKLM\System\CurrentControlSet\Services\WMI\Parameters" /v SystemErrorHandling /t REG_DWORD /d 3 /f
-
3
表示生成内核转储(1=仅日志, 2=完全转储, 3=内核转储
)。
二、虚拟机内存设置
关键要求
- 最小内存限制:确保虚拟机内存 ≥ 4GB(否则无法生成完整转储)。
- 预留空间:为转储文件分配足够磁盘空间(建议 ≥ 内存大小的 1.5 倍)。
- 存储位置:避免将转储文件放在系统卷(C:\)上,推荐使用独立数据盘。
VMware 示例配置
# 设置虚拟机内存为 16GB
vmcfg setmem <VMID> 16384
# 添加独立数据盘用于转储
vmcfg adddisk <VMID> --type ide --size 200000
三、注册表配置
1. 启用键盘触发蓝屏
适用系统:所有 Windows 版本
# 启用 i8042prt 键盘驱动崩溃
reg add "HKLM\System\CurrentControlSet\Services\i8042prt\Parameters" /v CrashOnCtrlScroll /t REG_DWORD /d 1 /f
# 启用 kbdhid 驱动崩溃(适用于新硬件)
reg add "HKLM\System\CurrentControlSet\Services\kbdhid\Parameters" /v CrashOnCtrlScroll /t REG_DWORD /d 1 /f
# 设置 NMI 转储选项
reg add "HKLM\System\CurrentControlSet\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
2. 注册表操作注意事项
-
备份:执行前备份
%windir%\system32\config\system
。 -
权限:需以 管理员权限 运行
regedit
。 -
验证:输入
reg query HKLM\System\CurrentControlSet\Services\i8042prt\Parameters
检查值是否为1
。
四、触发蓝屏转储
方法 1:NMI 中断(硬件支持)
-
物理服务器:长按主板上的 NMI 按钮(通常标记为
NMI
或CRASH
)。 - VMware 虚拟机:
# 通过命令行注入 NMI
vmtoolsd --command "injectNMI"
方法 2:键盘快捷键
-
组合键:
Ctrl + Shift + Esc
(打开任务管理器) → 按住Ctrl
键 → 按两次Scroll Lock
键。 - 效果:强制触发系统崩溃并生成转储文件。
验证转储文件
-
路径:默认保存在
C:\Windows\Minidump\
或自定义路径。 - 日志检查:
eventvwr.msc /c:Windows /f:System /s:localhost
- 查找事件 ID
1001
(蓝屏事件),确认转储文件关联记录。
五、高级配置与故障排查
1. 自定义转储路径
reg add "HKLM\System\CurrentControlSet\Services\WMI\Parameters" /v DumpFile /t REG_SZ /d "C:\DumpFiles\memory.dmp" /f
2. 禁用自动重启
bcdedit /set {default} bootmenupolicy legacy
bcdedit /set {default} recoveryenabled on
bcdedit /set {default} debug off
3. 分析转储文件
- 使用 Windows Debugger (WinDbg):
windbg -z C:\DumpFiles\memory.dmp
- 查看
BugCheckCode
和Driver_IRQL_NOT_LESS_OR_EQUAL
等关键信息。
六、安全与兼容性提醒
- 测试环境验证:首次配置前在非生产环境测试键盘触发和 NMI 功能。
-
权限隔离:限制
CrashOnCtrlScroll
权限至管理员组,防止误操作。 - 版本差异:
-
Windows 10/2016+:推荐使用
sysprep
或组策略部署转储设置。 -
旧版本系统(如 XP/2003):需手动编辑
boot.ini
添加crashdump=on
。