在Java中,生成dump文件通常指的是生成Java堆转储(Heap Dump)文件,这是一种用于分析和调试Java应用程序内存使用情况的手段。Java堆转储文件包含了Java虚拟机(JVM)在某个时间点的内存快照,包括所有的对象和它们的引用关系。这对于分析内存泄漏、性能调优等场景非常有用。生成Dump文件有两种方式,一种是自动生成;另外一种是手动生成

生成Dump文件

自动生成

java启动命令里添加这行指令

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logdir/tonghuan-org

手动生成

发生内存溢出时,如果没有配置自动生成,可以手动生成堆转储日志

 jmap -dump:live,format=b,file=heapdump.hprof 23990

dump容器内的应用

 docker exec ${container_id} jmap -dump:format=b,file=/data/logdir/patient-api/heapdump.hprof 21

21为容器内线程pid(可以通过ps -ef | grep java或者ls /proc查看线程)

使用宿主机jmap生成dump容器内的应用

# 查询容器pid
docker top ${container_name}
/data/jdk-17.0.13/bin/jmap -dump:format=b,file=/data/logdir/2heapdump.hprof pid

如何分析

一般Dump文件都会比较大,可以手动压缩一下,然后下载到本地,然后使用MAT工具导入后分析

# 压缩指令
tar -zcvf dump.tgz 2025-02-17-19-27-07heapdump.hprof 

常见内存溢出原因

  1. 死循环
  2. 处理大文件(例如大图片执行压缩等)
  3. 底层SQL查询没加分页,查询全量数据
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐