文档章节

full gc 监控 分析

j
 johnli
发布于 2016/09/26 12:08
字数 842
阅读 62
收藏 1

命令查看gc情况,以及jvm内存使用比例

  1. 如何发现是否发生FULL GC和FULL 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 jstat -gcutil pid

[root@wangfw-smarttrip-dev-7 ~]# jstat -gcutil 15393 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 22.50 71.58 34.74 97.33 3961 44.900 26 6.021 50.921


    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 GC和FULL GC的频率



2.  FULL GC分析和问题定位 

    a.     GC log收集和分析 

    (1)在JVM启动参数增加:-verbose:gc -Xloggc:<file_name>  -XX:+Print        GCDetails -XX:+PrintGCDateStamps

    PrintGCTimeStamp只能获得相对时间,建议使用PrintGCDateStamps获得full gc 发生的绝对时间 

      (2)如果采用CMS GC,仔细分析jstat FGC输出和GC 日志会发现, CMS的每个并发GC周期则有两个stop-the-world阶段——initial mark与final re-mark,使得CMS的每个并发GC周期总共会更新full GC计数器两次,initial mark与final 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打开分析文件。

本文转载自:http://jackyrong.iteye.com/blog/1750651

共有 人打赏支持
j
粉丝 0
博文 7
码字总数 3032
作品 0
程序员
私信 提问
Java虚拟机日志查看工具--gclogviewer

GC的状况是Java程序需要监控的重点,而人肉分析一堆文本自然是相当的痛苦,之前业界主要是用gcviewer来分析,但它不支持jdk6,gclogviewer是一个支持jdk 6的gc log可视化工具,gc log可用-XX...

bluedavy
2012/04/21
2.4K
0
成为JavaGC专家(2)—如何监控Java垃圾回收机制

本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,...

stefanzhlg
2014/12/05
0
0
成为JavaGC专家Part II — 如何监控Java垃圾回收机制

英文原文:cubrid,编译:ImportNew- 王晓杰 本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生...

変態L
2013/03/06
0
0
成为JavaGC专家(2)—如何监控Java垃圾回收机制

本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,...

Edwyn王
2015/09/22
66
0
成为JavaGC专家Part II — 如何监控Java垃圾回收机制

本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,...

ihaolin
2014/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AWS的自动部署工具codedeploy 部署前的准备工作

开始部署codedeploy: 1.先预置IAM用户: 创建一个IAM用户或使用一个与AWS相关联的用户; 复制以下的策略附加到IAM用户,向IAM用户赋予对codedeploy(及codedeploy所依赖的AWS服务和操作)的...

守护-创造
26分钟前
0
0
这可能是最详细的一线大厂Mysql面试题详解了

1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 从:io线程——在使用start slave 之后...

Java干货分享
36分钟前
1
0
人的精力是什么?如何强化精力

人的精力是什么? 人的精力是什么? 精力指精神和体力。精神包括一个人的精神状态,兴奋度,做事情的投入度,专注度,持续时间等。 人的精力来源 人的精力有4种来源,身体的、情感的、思想的和...

莫库什勒
54分钟前
2
0
JFinal开发的旅游线路营销Saas平台演示系统我部署了一个

今天部署了一个旅游线路营销管理系统的演示版: 演示地址:http://lvyou.jfinalxueyuan.com 演示账号:(暂时只给一个门店版的吧,批发商和总部的如果需要 演示看看 单独联系我微信:1876673...

山东-小木
今天
2
0
如何学习大数据技术

学习大数据技术,首先要明确大数据的概念。 大数据的概念作者认为有如下几点: 1.数据的来源多样性。例如关系数据库+文本+excel等 2.数据量大。TB级别的数据。 3.业务应用领域。实时性高与实...

董黎明
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部