1. 查看当前系统 jvm 内存分配 : jmap -heap [PID]
1 | jmap -heap 18932 |
2. 查看当前 jvm 内存使用量
1 | jstat -gc 23688 |
- S0C:第一个幸存区的大小
- S1C:第二个幸存区的大小
- S0U:第一个幸存区的使用大小
- S1U:第二个幸存区的使用大小
- EC:伊甸园区的大小
- EU:伊甸园区的使用大小
- OC:老年代大小
- OU:老年代使用大小
- MC:方法区大小
- MU:方法区使用大小
- CCSC: 压缩类空间大小
- CCSU: 压缩类空间使用大小
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
3. 查看 jvm 最近一次 gc 的统计和原因 : jstat -gccause [PID]
1 | jstat -gccause 18932 |
- S0 — Heap上的 Survivor space 0 区已使用空间的百分比
- S1 — Heap上的 Survivor space 1 区已使用空间的百分比
- E — Heap上的 Eden space 区已使用空间的百分比
- O — Heap上的 Old space 区已使用空间的百分比
- M — 元数据 区已使用空间的百分比
- CCS — 压缩使用比例
- YGC — 从应用程序启动到采样时发生 Young GC 的次数
- YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
- FGC — 从应用程序启动到采样时发生 Full GC 的次数
- FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
- GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
- LGC — 上次GC发生的原因
- GCC - 当前GC的原因
4. 使用 jmap dump整个 堆内存到文件
1 | jmap -dump:format=b,file=filename.bin [pid] |
5. 使用 eclipse MAT 工具分析内存
5.1. 安装,打开 MAT
5.2. MAT 设置
- MAT默认是只分析reachable对象实例,所以在”Preferences=>Memory Analyzer”中勾选”Keep Unreachable Objects”,删除索引文件Dump同路径下的所有”.index”,即可看到所有的对象,再根据上述步骤4进行分析
- 修改堆内存大小,修改 mat.app/Contents/Eclipse/MemoryAnalyzer.ini 文件中的 -Xmx 的dance,比如修改为: -Xmx6192M,表示修改堆内存为 6G.