首页 > 代码库 > JVM 内存问题分析方法记录

JVM 内存问题分析方法记录

1、GC日志分析

除了CMS的日志和其他GC的日志差别较大外,它们都可以抽象成如下格式

[GC [<collector>:<starting occupancy1>-><ending occupancy1>(total size1), <pause time1> secs] <starting occupancy2>-><ending occupancy2>(total size2), <pause time2> secs]

<collector>GC 表示收集器的名称

<starting occupancy1> 表示 Young 区在 GC 前占用的内存

<ending occupancy1> 表示 Young 区在 GC 后占用的内存

<pause time1> 表示 Young 区局部收集时 JVM 暂停处理的时间

<starting occupancy2> 表示 JVM Heap 在 GC 前占用的内存

<ending occupancy2> 表示 JVM Heap 区在 GC 后占用的内存

<pause time2> 表示 GC 过程中 JVM 暂停处理的时间

可以根据:

  <ending occupancy1> - <starting occupancy1> 和 <ending occupancy2> - <starting occupancy2>

判断是否存在内存泄漏

还可以使用 jstat -gcutil [pid] [interval] [count] 进行分析 

各参数分别代表:

 S0 — Heap上的 Survivor space 0 区已使用空间的百分比    

    S1 — Heap上的 Survivor space 1 区已使用空间的百分比    

    E   — Heap上的 Eden space 区已使用空间的百分比    

    O   — Heap上的 Old space 区已使用空间的百分比    

    P   — Perm space 区已使用空间的百分比 

    YGC — 从应用程序启动到采样时发生 Young GC 的次数 

    YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)     FGC — 从应用程序启动到采样时发生 Full GC 的次数 

    FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)     GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒) 

2、堆快照文件分析

  jmap -dump:format=b file=[filename] [pid]

记录堆的内存快照,然后利用工具 mat 分析整个 Heap 的对象关联情况

如果内存耗尽那么可能导致JVM直接垮掉,通过参数:-XX:+HeapDumpOnOutOfMemoryError 可记录内存快照,-XX:HeapDumpPath 指定文件路径

3、JVM Crash 日志分析

JVM 退出时一般会在工作目录产生日志文件,也可 -XX:ErrorFile=/path/of/file 指定

JVM 内存问题分析方法记录