`
javaG
  • 浏览: 550140 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

为何在使用CMS gc算法时会出现连续两次full gc

    博客分类:
  • java
JVM 
阅读更多

现象:

jstat -gcutil pid 1000观察到的情况,段时间内连续两次full gc

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT 
59.33   0.00  63.98  69.66  59.31  24338  274.969   307   17.349  292.318
 59.33   0.00  86.19  69.66  59.31  24338  274.969   307   17.349  292.318
  0.00  60.52  10.22  70.10  59.31  24339  275.006   308   17.373  292.379
  0.00  60.52  30.03  70.10  59.31  24339  275.006   308   17.373  292.379
  0.00  60.52  53.57  70.10  59.31  24339  275.006   308   17.373  292.379
  0.00  60.52  76.45  70.10  59.31  24339  275.006   308   17.373  292.379
  0.00  60.52  93.77  70.10  59.31  24339  275.006   308   17.373  292.379
 61.16   0.00  15.66  70.53  59.31  24340  275.040   308   17.373  292.413
 61.16   0.00  40.71  67.96  59.31  24340  275.040   309   17.399  292.439
 61.16   0.00  66.44  59.90  59.31  24340  275.040   309   17.399  292.439

 同一时间的gc log

第一次

[GC [1 CMS-initial-mark: 1220647K(1740800K)] 1227199K(2385920K), 0.0057570 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

在旧生代空间为1220647K触发marking操作,后面1227199K(2385920K)=当前总体jvm内存使用(maxMem)

initial  标记从根集合中可直接访问的对象,要停顿整个应用

原文:This is initial Marking phase of CMS where all the objects directly reachable from roots are marked and this is done with all the mutator threads stopped.

[CMS-concurrent-mark: 1.084/1.084 secs] [Times: user=2.43 sys=0.11, real=1.08 secs]

完成mark耗时1.084 secs 并发执行

[CMS-concurrent-preclean: 0.008/0.009 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]

开始执行清理,目的是减少remark的时间

 

第二次

[GC [ParNew: 579913K->4387K(645120K), 0.0080390 secs] 1800561K->1226923K(2385920K), 0.0082860 secs] [Times: user=0.05 sys=0.00, real=0.01 secs]

minor gc

  CMS: abort preclean due to time [CMS-concurrent-abortable-preclean: 2.715/5.047 secs] [Times: user=4.42 sys=0.40, real=5.05 secs]

停止执行preclean 默认是eden到达50%或者real time=5secs停止

[GC[YG occupancy: 153139 K (645120 K)][Rescan (parallel) , 0.0348570 secs][weak refs processing, 0.0005070 secs] [1 CMS-remark: 1222535K(1740800K)] 1375675K(2385920K), 0.0355150 secs] [Times: user=0.19 sys=0.00, real=0.04 secs]

remark会停顿整个应用

[CMS-concurrent-sweep: 1.358/1.360 secs] [Times: user=1.85 sys=0.10, real=1.36 secs]

[CMS-concurrent-reset: 0.003/0.003 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

gcutil 看到连续两次 full gc

原因分析:

目前来看,只有当initial-mark和remark时才会停顿整个应用,这个两个时间点jstat -gcutil表现都为full gc次数加一

 

real != user+sys

原因:user和sys代表处于用户和系统态的时间,不包含block的时间.但是由于多cpus这个东东是累加的.所以一般来说user和sys相加都大于real

real是从启动到终止的真实时间(现实中消耗),包含block.

----

CMS-initial-mark 对应一次fullgc,会停顿所有线程

CMS-remark 对应依次fullgc,会停顿所有线程

其他的日志对应的操作都是不会停顿线程的

可以通过grep "initial" 和grep "remark" 来看你每次停顿的时间

 

分享到:
评论

相关推荐

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

    GChisto及CMS GC相应补丁文件,补丁文件未亲测。 This patch adds the following features and improvements when using CMS GC in incremental mode: detecting Full GCs corrected parsing errors when using -XX:...

    JAVA面试题垃圾收集机制

    1.介绍下垃圾收集机制(在什么时候,对什么,做了什么)? 在什么时候? 在触发GC的时候,具体如下,这里只说常见的Young GC和Full GC。...CMS GC时出现Concurrent Mode Failure会导致一次Full GC的产生。

    gcviewer-1.37-SNAPSHOT.jar

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

    EdwardLee03#issue-case#万恶的swap(CMS GC的remark耗时好几秒)1

    【现象】悲催的是运行了几天后,突然有几台机器开始报警,上机器看到的现象是CMS GC的remark竟然花了20s+,而实际上这个时候old也就用了2g+,这个时

    cms二次开发

    CMS v9.1.7(20110909)版本整合discuz X2 出现无法同行问题的解决方案

    帝国cms使用说明

    帝国cms使用说明

    CMS使用教程doc文档

    CMS使用教程文档DOC文档

    51javacms CMS系统 v1.0.9 源代码

    51javacms是一款纯ajax的mvc架构cms;摒弃了传统的ssh的java企业级架构的庞大和臃肿;代码简洁,功能简单实用,安装一键式;站内搜索是使用lucene3.3的技术;真正的开源;真正的免费;非常适合互联网中小型网站的...

    动易cms动易cms动易cms

    动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms

    jvm性能调优-垃圾收集器parnew&CMS底层三色标记算-performance-gc-parnew-cms.zip

    jvm性能调优-垃圾收集器parnew&CMS底层三色标记算-performance-gc-parnew-cms

    php的cms系统提供大家使用

    php的cms系统提供大家使用php的cms系统提供大家使用php的cms系统提供大家使用

    cms样例使用以及安装(经典)

    cms样例使用以及安装cms样例使用以及安装cms样例使用以及安装cms样例使用以及安装cms样例使用以及安装cms样例使用以及安装

    cms源码 cms源码

    cms源码 cms源码 cms源码 cms源码 cms源码 cms源码 cms源码 cms源码

    苹果CMS V10演员库(明星库)下载和使用教程

    苹果CMS V10演员库(明星库)下载和使用教程 数据说明 本数据是适合苹果CMS v10的演员库(明星库),内含4000条明星数据,下载后导入数据库即可使用,具体使用方法见下面的使用说明,有的采集站也有分享苹果CMS V10演员...

    JVM参数设置详细说明

    在使用CMS gc的时候他有两种触发gc的方式:gc估算触发和heap占用触发。我们的1.5.0.09 环境下有次old 区heap占用在30%左右,她就频繁gc,个人感觉系统估算触发这种方式不靠谱,还是用 heap 使用比率触发比较稳妥。 ...

    Avaya CMS Supervisor中文使用说明

    详细介绍Avaya公司CMS Supervisor 使用方法和配置技巧。

    CMS详细介绍和详细使用例子

    CMS 详细介绍CMS 以及CMS的源代码和使用说明

    详解JVM的垃圾回收算法来做细节.docx

    我们知道目前的JVM的垃圾回收器都...另外在进行根节点枚举时,这些根节点必然是不能变化的(不可能为每条指令都生成对应的OopMap),即必须冻结在开始扫描之前的某个时间点,这也是为什么初始标记时都会需要STW的原因。

    51javacms CMS系统 v1.0.9 正式版.zip

    51javacms是一款纯ajax的mvc架构cms;摒弃了传统的ssh的java企业级架构的庞大和臃肿;代码简洁,功能简单实用,安装一键式;站内搜索是使用lucene3.3的技术;真正的开源;真正的免费;非常适合互联网中小型网站的...

    GC调优(入门篇)

    可见,无论使用多少堆外内存,对JVM内存的使用终究是绕不过去,既然绕不过去...本文就将会介绍HBase应用场景下CMS GC策略的调优技巧,后续还会针对另一业界开始使用的GC策略-G1GC策略在HBase应用场景下进行调优介绍。

Global site tag (gtag.js) - Google Analytics