Skip to content
发布于 更新于

1. 使用以下命令进行dump java文件 ​

shell
jmap -dump:[live],format=b,file=<file-path> <pid>
jmap -dump,format=b,file=<file-path> <pid>

2. eclipse mat ​

jdk 8 使用Memory Analyzer 1.7.0 Release版本

浅堆(Shallow Heap)和深堆(Retained Heap)是两个非常重要的概念,它们分别表示一个对象结构所占用的内存大小和一个对象被GC回收后,可以真实释放的内存大小。

2.1. 元空间内存泄漏 ​

2.2. 堆OOM ​

  • 内存中没有回收的对象过多
  • 回收过慢,内存申请过多、过快

3. jvisualvm ​

3.1. 常见分析思路 ​

  • 先确认是堆内存问题、元空间问题还是本机内存问题。
  • 如果是堆问题,先看大对象、对象数量和 GC 回收情况。
  • 如果是元空间问题,优先看动态类加载、类加载器泄漏和字节码增强。

3.2. 工具分工 ​

  • jmap:导出堆 dump。
  • MAT:分析对象引用链、泄漏嫌疑和 retained heap。
  • jvisualvm:看堆、线程、CPU、Sampler 和实时运行情况。

3.3. 实战建议 ​

  • dump 文件要尽量在问题现场第一时间保留。
  • 结合 GC 日志、线程栈和业务日志一起看,单看 dump 容易误判。
  • 内存问题往往不是“对象太大”,更多是“对象不该活那么久”。

基于 VitePress + GitHub Actions 自动部署