目录
一、简介
二、生成方式
三、Java Web项目配置参数
四、最佳实践
一、简介Dump文件是JVM在运行过程中生成的内存快照文件,主要用于诊断Java应用的内存问题(如内存泄漏、OOM错误)和线程状态分析。在Java Web项目中,常见的dump文件类型包括:
堆Dump(Heap Dump) 记录JVM堆内存中所有对象的详细信息,包括对象类型、引用关系和内存占用。 $$ \text{文件大小} \approx \text{堆内存使用量} $$线程Dump(Thread Dump) 捕获所有线程的瞬时状态(如调用栈、锁状态),用于分析死锁或线程阻塞问题。二、生成方式自动触发
OOM错误时生成:通过JVM参数配置(见第三节)JVM崩溃时生成:如Native代码导致的崩溃(hs_err_pid.log)手动触发
# 生成堆Dump
jmap -dump:format=b,file=heapdump.hprof
# 生成线程Dump
jstack -l > threaddump.txt
通过工具触发
JVisualVM / JConsole 的"Heap Dump"按钮Arthas的 heapdump / thread 命令Linux信号:kill -3
# 基础配置示例(Tomcat)
JAVA_OPTS="$JAVA_OPTS
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/dumps/webapp_heapdump.hprof
-XX:ErrorFile=/opt/dumps/hs_err_pid%p.log
-XX:+PrintGCDetails
-Xloggc:/opt/dumps/gc.log"
参数作用推荐值-XX:+HeapDumpOnOutOfMemoryErrorOOM时自动生成堆Dump必开启-XX:HeapDumpPath指定堆Dump保存路径绝对路径(确保写权限)-XX:ErrorFileJVM崩溃日志路径%p 表示进程ID-XX:+CrashOnOutOfMemoryErrorOOM时强制崩溃生成完整Dump可选-XX:OnOutOfMemoryError触发自定义脚本如 kill -3 %p四、最佳实践路径配置
-XX:HeapDumpPath=/var/dumps/${webapp_name}_%t.hprof
%t 自动添加时间戳,避免覆盖
监控集成
使用APM工具(如SkyWalking、Pinpoint)自动捕获Dump日志系统监控 java.lang.OutOfMemoryError 关键字分析工具
Eclipse MAT:分析堆Dump内存泄漏FastThread:在线分析线程Dump java -jar mat.app/Contents/MacOS/MemoryAnalyzer heapdump.hprof
安全策略
限制Dump文件访问权限(避免敏感数据泄露)定期清理旧文件(通过cron任务)注:生产环境建议配置-XX:+ExitOnOutOfMemoryError防止故障扩散,同时确保Dump路径磁盘空间充足(通常预留2倍堆内存空间)。