`

(转)FULL GC分析过程分享

 
阅读更多

 

 

http://www.taobaotest.com/blogs/2294
在性能测试过程中,FULL GC频繁是比较常见的问题,FULL GC 产生的原因有很多,这里主要针对meta压测过程中分析FULL GC问题的一些思路进行分享,供大家参考
1.
如何发现是否发生FULL GCFULL GC是否频繁
使用JDK自带的轻量级小工具jstat
语法结构:
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

参数解释:
Options —
选项,我们一般使用 -gcutil 查看gc情况
vmid — VM
的进程号,即当前运行的java进程号
interval–
间隔时间,单位为秒或者毫秒
count —
打印次数,如果缺省则打印无数次
比如 /opt/taobao/java/bin/jstat –gcutil pid 5000

输出结果:
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 90.63 100.00 58.82 3.51 183 2.059 0 0.000 2.059
0.00 15.48 7.80 60.99 3.51 185 2.092 1 0.305 2.397
0.00 15.48 18.10 47.90 3.51 185 2.092 2 0.348 2.440
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 —
从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
通过FGC我们可以发现系统是否发生FULL GCFULL GC的频率

2. FULL GC
分析和问题定位
a. GC log
收集和分析
(1)
JVM启动参数增加:"-verbose:gc -Xloggc:<file_name> -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
PrintGCTimeStamp
只能获得相对时间,建议使用PrintGCDateStamps获得full gc 发生的绝对时间
(2)
如果采用CMS GC,仔细分析jstat FGC输出和GC 日志会发现, CMS的每个并发GC周期则有两个stop-the-world阶段——initial markfinal re-mark,使得CMS的每个并发GC周期总共会更新full GC计数器两次,initial markfinal re-mark各一次

b. Dump JVM
内存快照
/opt/taobao/java/bin/jmap -dump:format=b,file=dump.bin pid
这里有一个问题是什么时候进行dump?
一种方法是前面提到的用jstat工具观察,当OLD区到达比较高的比例如60%,一般会很快触发一次FULL GC,可以进行一次DUMP,FULL GC发生以后再DUMP一次,这样比较就可以发现到底是哪些对象导致不停的FULL GC
另外一种方法是通过配置JVM参数
-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC
分别用于指定在full GC之前与之后生成heap dump

c.
利用MAT((Memory Analyzer Tool)工具分析dump文件
关于MAT具体使用方法网上有很多介绍,这里不做详细展开,这里需要注意的是:
(1) MAT
缺省只分析reachable的对象,unreachable的对象(将被收集掉的对象)被忽略,而分析FULL GC频繁原因时unreachable object也应该同时被重点关注。如果要显示unreachable的对象细节必须用mat 1.1以上版本并且打开选项“keep unreachable object”
(2)
通常dump文件会好几个G,无法在windows上直接进行分析,我们可以先把dump文件在linux上进行分析,再把分析好的文件拷贝到windows上,在windows上用MAT打开分析文件。

 

 

分享到:
评论

相关推荐

    GCViewer-FullGC分析工具

    GCViewer 能否分析 java 程序 GC 日志,能否图表展示堆内存,年轻代,老年代,永久带以及full gc 的使用情况

    JVM Full GC 之 MAT工具分析实践-阿沐1

    1.查看当前机器上所有运行的java进程名称与pid(进程编号) 2.显示指定的jvm进程所有的属性设置和配置参数 1.方法一:使用jdk的jmap命令 2.方

    AviatorEvaluator执行脚本导致Metaspace不足引发频繁 Full GC

    数据分析&特征平台DMP 最近频繁发生Full GC, 引发集群卡顿,导致经常超时,按照常规的方法,肯定是先看GC 日志 2020-02-17T10:17:24.672+0800: 48172.920: [GC (Allocation Failure) 2020-02-17T10:17:24.672+0800: ...

    FullGC的样例报告

    FullGC的样例报告:包括因为元空间不足、频繁创建大量对象且堆空间较小导致的FullGC

    jvm-full-gc调优-jvm-full-gc.zip

    jvm-full-gc调优-jvm-full-gc

    一次诡异的full gc查找问题全过程

    主要给大家分享介绍了一次诡异的full gc查找问题全部过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧啊

    JAVA gc日志分析工具GChisto及CMS GC补丁

    detecting Full GCs corrected parsing errors when using -XX:+PrintGCDateStamps corrected parsing errors when icms_dc=NN appears in GC-log tested so far only with this combination of parameters: -XX:+...

    java应用JVM的GC频率观察方法

    一般Full GC时,机器的Load会升高,应用也会停止响应一会(持续长达几秒),如果应用一直频繁的进行FullGC,一方面会出现应用无法提供正常服务,另一方面甚至会导致应用崩溃址至挂掉。 所以观察应用的GC频率是可以...

    Java full gc触发情况实例解析

    主要介绍了Java full gc触发情况实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    JVM分享,包含JVM的优化目标、优化原则、JVM组成、内存区域划分、垃圾回收算法、垃圾回收器、FullGC触发时机等等.

    JVM的内容分享,包含JVM的优化目标、优化原则、JVM组成、内存区域划分、垃圾回收算法、垃圾回收器、FullGC触发时机、对象布局、元空间存储、GC调优

    PL2303GC USB to Full UART Bridge Controller with GPIO.pdf

    PL2303TA.HXD.RA.EA.SA停产通知:到2019年底,将淘汰(EOL)全速USB转串行桥控制器的五个高产旧版本。可以用新PL2303G系列产品代替它。请最后一次订购时间为2020年6月。最后一次发货将在2020年末安排。 PL2303GC是一...

    gcviewer-1.37-SNAPSHOT.jar

    用于分析 java gc日志文件。根据日志中的CMS GC统计信息可得到Full GC(也可以理解为Major GC)以及Minor GC相关数据

    JAVA面试题垃圾收集机制

    当准备要触发一次Young GC时,如果发现统计数据说之前Young GC的平均晋升大小比目前老年代剩余的空间大,则不会触发Young GC而是转为触发Full GC。(通常情况) 如果有永久代的话,在永久代需要分配空间但已经没有...

    GChisto(专业分析gc日志)

    GChisto是一款专业分析gc日志的工具,可以通过gc日志来分析:Minor GC、full gc的时间、频率等等,通过列表、报表、图表等不同的形式来反应gc的情况。虽然界面略显粗糙,但是功能还是不错的。 配置好本地的jdk环境...

    性能瓶颈分析及案例总结

    2 性能分析步骤 211 确定应用类型 ...410 CMS 回收是否等于 FULL GC? 411 判断 FULL GC 是否正常的标准 412 FULL GC 出现的几种情况 413 CMS 常用参数 414 堆内存溢出后处理方案。 5 瓶颈分析总结及案例

    poi大量数据读取gc内存溢出解决方案

    poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...

    GC2053 CSP Datasheet Release V1.1 20181212.pdf

    The full scale integration of high-performance and low-power functions makes the GC2053 best fit the design, reduce implementation process, and extend the battery life of Motion Camera, Car DVR, and...

    pdf-converter_full 互转

    pdf-converter_full 互转

    GCeasy-report-metaspace-oomerror.pdf

    gceasy 元空间内泄露导致Full GC日志分析报告

Global site tag (gtag.js) - Google Analytics