Dump文件

进程的内存镜像
订阅
订阅
0有用+1
0
Dump文件,又称内存转储文件或内存快照文件,是进程在特定时刻的内存镜像,记录了程序运行的模块、线程、堆栈及异常等信息,用于系统或应用程序崩溃后的问题分析和调试 [6]
在Windows系统中,当发生停止错误(蓝屏)时,系统可生成小型、内核或完整内存转储文件 [3-4] [7]。进程异常终止时会生成核心转储文件,可通过coreadm命令进行管理 [1-2]。对于Java应用程序,JVM可生成堆转储文件;对于.NET程序,Dump文件常用于分析内存泄漏 [8-9]。此类文件需使用WinDbg、Dumpchk.exe等专用工具打开分析 [3] [6] [10]
中文名
Dump文件
别    名
内存转储文件、内存快照文件、核心转储文件
简    介
进程的内存镜像
打开方式
专用工具软件
作    用
用于问题分析和调试

基本概念

播报
编辑
Dump文件,又称内存转储文件、内存乌茅整快拔嫌员照文件或章乌核心转储文件(Core Dump),是进程的内存镜像。它是一个进程或系统在某甩埋遥达一给定时刻的快照,包含了程序运行时的内存内容、模块信息、线程信息、堆栈调用信息、异常信息等数据 [6]签元艰凳海和。
当进程崩溃或出现其他问题时,可以生成验体境Dump文件供调试分析使用,有助于再现问题场景、定位错误根源 [3] [6-7]。这种文件必须使用专用工具软件(如WinDbg、VisualVM等)打开和分析 [3] [6] [8]朽归。

类型与生成

播报
编辑
Dump文件是一个进程或系统在某一给定时间的快照,用于故障诊断、性能分析和程序调试 [6] [9]
在Windows系统中,内存转储文件类型包括完整内存转储、内核内存转储、小型内存转储(64 KB)和活动内存转储。完整内存转储记录系统内存的所有内容,需要足够大的分页文件。内核内存转储仅记录内核内存,通常大小介于150 MB和2 GB之间,可加快记录过程。小型内存转储记录最小的有用信息集,需要至少2 MB的分页文件,每次创建新文件,其包含的信息有Stop消息、已加载驱动程序的列表、处理器上下文、进程信息和内核上下文以及内核模式调用堆栈等 [3] [7]
在Unix/Linux系统中,核心转储文件是在进程或应用程序异常终止时生成的。可使用coreadm命令管理核心转储文件,例如配置每进程核心转储文件路径和全局核心转储文件路径,使用变量(如%f、%p)定义文件名模式,以及管理setuid程序的核心转储生成权限 [1]
Java虚拟机(JVM)转储文件也称为Java堆转储或Java核心转储,包含JVM堆内存和线程状态信息的快照,用于分析内存泄漏和性能问题 [8]
Dump文件的生成方式包括程序异常退出、系统崩溃时自动触发,以及通过调试器(如WinDbg)、特定工具(如NotMyFault工具、NMI开关)、系统设置或运行时环境特定工具(如jmap、jstack)手动触发 [4] [6] [8]。在Unix/Linux系统中,可通过coreadm命令配置和启用核心转储 [1]。快速崩溃转储工具支持以压缩格式保存转储文件,可使用dumpadm -z选项进行配置 [5]
可使用Dumpchk.exe等工具验证内存转储文件是否已正确创建,避免分析损坏的文件 [3] [10]

配置与管理

播报
编辑
配置与管理Dump文件的主要目的是在程序发生故障时,通过保存内存状态来辅助问题排查与调试 [6]
在Unix-like系统中,例如Solaris,可使用命令管理核心转储文件。该命令可用于配置全局核心转储文件路径和每进程核心转储文件路径。可设置核心转储文件名称模式,使用变量如(进程ID)、(可执行文件名)等来区分文件。出于安全考虑,setuid程序生成核心转储文件默认禁用,且生成的setuid核心转储文件仅属超级用户所有。使用不带参数的命令可显示当前的核心转储配置。例如,命令用于设置全局文件名称模式,用于启用全局核心转储 [1]
在Windows系统中,可通过“控制面板”->“系统”->“高级系统设置”->“启动和恢复”设置来配置转储类型(如小型内存转储、内核内存转储)和存储路径 [4] [7]。此外,可通过编辑注册表)或使用NMI(非掩码中断)开关等方式手动生成内存转储文件 [4]。生成转储文件后,可使用工具验证转储文件是否已正确创建 [10]

发展历程

播报
编辑
Dump文件技术最初主要用于操作系统内核调试,后其概念和应用逐步扩展至应用程序层,成为软件诊断的重要工具 [8-9]
Windows系统提供了多种内存转储文件类型以适应不同需求,包括完整内存转储、内核内存转储、小型内存转储(64KB/256KB)和活动内存转储 [7]。小型内存转储文件包含最少的有用信息,如Stop消息、已加载驱动程序的列表、处理器和线程上下文等,每次发生计算机故障时都会创建新文件 [3]
为提高效率,出现了如“快速崩溃转储”等工具和技术,旨在缩短系统保存崩溃转储的时间并减少磁盘空间占用。完成崩溃转储所需的时间可缩短2至10分钟,所需磁盘空间也相应减少 [5]
Dump文件的应用范围从操作系统内核调试扩展到了应用程序层,如JVM Heap Dump、.NET Dump,用于分析内存泄漏、性能瓶颈和程序崩溃等问题 [8-9]
释义
在Windbg中可以通过.dump命令保存进程的dump文件。比如下面的命令把当前进程的镜像保存为c:\testdump.dmp文件:
.dump /ma C:\testdump.dmp
其中的/ma参数表示dump文件应该包含进程的完整信息,包括整个用户态的内存,这样dump文件尺寸会比较大,信息非常全面。如果不使用/ma参数,保存下来的dump文件只包含了部分重要资料,比如寄存器和线程栈空间,文件尺寸会比较小,无法分析所有的数据。
在Windbg中,通过File→Open Crash Dump菜单可以打开dump文件进行分析。打开dump文件后,运行调试命令看到的信息和状态,就是dump文件保存时进程的状态。通过dump文件能够方便地保存发生问题时进程的状态,方便事后分析
dump还是oracleSQL数据库中导出的数据文件。可以备份数据,并可以实现后期的导入。