欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

这里分别是 6.05G 和 23.6G; 0.1365130 次  来源:劳务派遣管理系统 时间:2018-10-13

原文出处: 王蒙

在两年前的文章 JVM 进修——垃圾收集器与内存分派计策中,昆山软件开发,已经对 GC 算法的道理以及常用的垃圾收集器做了相应的总结。本日这篇文章主要是对出产情况中(Java7)常用的两种垃圾收集器(ParNew:年青代,CMS:暮年月)从日志信息长举办阐明,做一下总结,这样当我们在排查相应的问题时,看到 GC 的日志信息,不会再那么生疏,能清楚地知道这些日志是什么意思,GC 线程当前处在哪个阶段,正在做什么工作等。

ParNew 收集器

ParNew 收集器是年青代常用的垃圾收集器,它回收的是复制算法,youngGC 时一个典范的日志信息如下所示:

2018-04-12T13:48:26.134+0800: 15578.050: [GC2018-04-12T13:48:26.135+0800: 15578.050: [ParNew: 3412467K->59681K(3774912K), 0.0971990 secs] 9702786K->6354533K(24746432K), 0.0974940 secs] [Times: user=0.95 sys=0.00, real=0.09 secs]

依次阐明一下上面日志信息的寄义:

  • 2018-04-12T13:48:26.134+0800:Mirror GC 产生的时间;
  • 15578.050:GC 开始时,相对 JVM 启动的相对时间,单元时秒,这里是4h+;
  • ParNew:收集器名称,这里是 ParNew 收集器,它利用的是并行的 mark-copy 算法,GC 进程也会 Stop the World;
  • 3412467K->59681K:收集前后年青代的利用环境,这里是 3.25G->58.28M;
  • 3774912K:整个年青代的容量,这里是 3.6G;
  • 0.0971990 secs:Duration for the collection w/o final cleanup.
  • 9702786K->6354533K:收集前后整个堆的利用环境,这里是 9.25G->6.06G;
  • 24746432K:整个堆的容量,这里是 23.6G;
  • 0.0974940 secs:ParNew 收集器标志和复制年青代在世的工具所耗费的时间(包罗和暮年月通信的开销、工具提升到暮年月开销、垃圾收集周期竣事一些最后的清理工具等的花销);
  • 对付 [Times: user=0.95 sys=0.00, real=0.09 secs],这内里涉及到三种时间范例,寄义如下:

  • user:GC 线程在垃圾收集期间所利用的 CPU 总时间;
  • sys:系统挪用可能期待系统事件耗费的时间;
  • real:应用被暂停的时钟时间,由于 GC 线程是多线程的,导致了 real 小于 (user+real),假如是 gc 线程是单线程的话,real 是靠近于 (user+real) 时间。
  • CMS 收集器

    CMS 收集器是暮年月常常利用的收集器,它回收的是标志-清楚算法,应用措施在产生一次 Full GC 时,典范的 GC 日志信息如下:

    2018-04-12T13:48:26.233+0800: 15578.148: [GC [1 CMS-initial-mark: 6294851K(20971520K)] 6354687K(24746432K), 0.0466580 secs] [Times: user=0.04 sys=0.00, real=0.04 secs]
    2018-04-12T13:48:26.280+0800: 15578.195: [CMS-concurrent-mark-start]
    2018-04-12T13:48:26.418+0800: 15578.333: [CMS-concurrent-mark: 0.138/0.138 secs] [Times: user=1.01 sys=0.21, real=0.14 secs]
    2018-04-12T13:48:26.418+0800: 15578.334: [CMS-concurrent-preclean-start]
    2018-04-12T13:48:26.476+0800: 15578.391: [CMS-concurrent-preclean: 0.056/0.057 secs] [Times: user=0.20 sys=0.12, real=0.06 secs]
    2018-04-12T13:48:26.476+0800: 15578.391: [CMS-concurrent-abortable-preclean-start]
    2018-04-12T13:48:29.989+0800: 15581.905: [CMS-concurrent-abortable-preclean: 3.506/3.514 secs] [Times: user=11.93 sys=6.77, real=3.51 secs]
    2018-04-12T13:48:29.991+0800: 15581.906: [GC[YG occupancy: 1805641 K (3774912 K)]2018-04-12T13:48:29.991+0800: 15581.906: [GC2018-04-12T13:48:29.991+0800: 15581.906: [ParNew: 1805641K->48395K(3774912K), 0.0826620 secs] 8100493K->6348225K(24746432K), 0.0829480 secs] [Times: user=0.81 sys=0.00, real=0.09 secs]2018-04-12T13:48:30.074+0800: 15581.989: [Rescan (parallel) , 0.0429390 secs]2018-04-12T13:48:30.117+0800: 15582.032: [weak refs processing, 0.0027800 secs]2018-04-12T13:48:30.119+0800: 15582.035: [class unloading, 0.0033120 secs]2018-04-12T13:48:30.123+0800: 15582.038: [scrub symbol table, 0.0016780 secs]2018-04-12T13:48:30.124+0800: 15582.040: [scrub string table, 0.0004780 secs] [1 CMS-remark: 6299829K(20971520K)] 6348225K(24746432K), 0.1365130 secs] [Times: user=1.24 sys=0.00, real=0.14 secs]
    2018-04-12T13:48:30.128+0800: 15582.043: [CMS-concurrent-sweep-start]
    2018-04-12T13:48:36.638+0800: 15588.553: [GC2018-04-12T13:48:36.638+0800: 15588.554: [ParNew: 3403915K->52142K(3774912K), 0.0874610 secs] 4836483K->1489601K(24746432K), 0.0877490 secs] [Times: user=0.84 sys=0.00, real=0.09 secs]
    2018-04-12T13:48:38.412+0800: 15590.327: [CMS-concurrent-sweep: 8.193/8.284 secs] [Times: user=30.34 sys=16.44, real=8.28 secs]
    2018-04-12T13:48:38.419+0800: 15590.334: [CMS-concurrent-reset-start]
    2018-04-12T13:48:38.462+0800: 15590.377: [CMS-concurrent-reset: 0.044/0.044 secs] [Times: user=0.15 sys=0.10, real=0.04 secs]

    CMS Full GC 拆分隔来,涉及的阶段较量多,下面别离来先容各个阶段的环境。

    阶段1:Initial Mark