Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JVM CMS GC日志详解

JVM CMS GC日志详解

作者头像
斯武丶风晴
发布于 2020-05-09 09:14:20
发布于 2020-05-09 09:14:20
1K00
代码可运行
举报
文章被收录于专栏:龙首琴剑庐龙首琴剑庐
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# JDK8
-Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC

CMS 日志格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[GC (Allocation Failure) [ParNew: 5504K->640K(6144K), 0.0136830 secs] 5504K->1556K(19840K), 0.0137738 secs] [Times: user=0.06 sys=0.01, real=0.01 secs] 
[GC (Allocation Failure) [ParNew: 6144K->544K(6144K), 0.0012950 secs] 7060K->2102K(19840K), 0.0013310 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [ParNew: 6048K->640K(6144K), 0.0175172 secs] 7606K->4311K(19840K), 0.0176172 secs] [Times: user=0.07 sys=0.01, real=0.01 secs] 
[GC (Allocation Failure) [ParNew: 6144K->640K(6144K), 0.0163793 secs] 9815K->7694K(19840K), 0.0164765 secs] [Times: user=0.10 sys=0.01, real=0.01 secs] 
# ParNew:年轻代收集器   6144->640:收集前后的对比 (6144):整个年轻代容量  9815 ->7694:整个堆的情况(19840):整个堆大小
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[GC (CMS Initial Mark) [1 CMS-initial-mark: 7054K(13696K)] 7806K(19840K), 0.0023289 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
# 初始标记,STW, 7054K(13696K)  老年代使用空间、最大空间       7806K(19840K)   整个堆使用空间、最大空间
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.015/0.015 secs] [Times: user=0.05 sys=0.00, real=0.01 secs] 
# 并发标记,这里的时间意义不大,因为是并发执行
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
# //标记Card为Dirty,也称为Card Markin
[GC (CMS Final Remark) [YG occupancy: 1865 K (6144 K)][Rescan (parallel) , 0.0015431 secs][weak refs processing, 0.0000870 secs][class unloading, 0.0017562 secs][scrub symbol table, 0.0012416 secs][scrub string table, 0.0006834 secs][1 CMS-remark: 7054K(13696K)] 8919K(19840K), 0.0054720 secs] [Times: user=0.01 sys=0.01, real=0.01 secs] 
   #  STW阶段,YG occupancy:  年轻代占用及容量
   #[Rescan (parallel)STW下的存活对象标记
   #weak refs processing: 弱引用处理
   #class unloading: 卸载用不到的class
   #scrub symbol(string) table:   cleaning up symbol and string tables which hold class-level metadata and internalized string respectively
   #CMS-remark: 7054K(13696K): 阶段过后的老年代占用及容量
   # 8919K(19840K) : 阶段过后的堆占用及容量
[CMS-concurrent-sweep-start]
[CMS-concurrent-sweep: 0.010/0.010 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
# 标记已经完成,进行并发清理
[CMS-concurrent-reset-start]
[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
# 重置内部结构,为下次GC做准备

by Sven Augustus https://my.oschina.net/langxSpirit

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JVM 之 ParNew 和 CMS 日志分析
在两年前的文章 JVM 学习——垃圾收集器与内存分配策略中,已经对 GC 算法的原理以及常用的垃圾收集器做了相应的总结。今天这篇文章主要是对生产环境中(Java7)常用的两种垃圾收集器(ParNew:年轻代,CMS:老年代)从日志信息上进行分析,做一下总结,这样当我们在排查相应的问题时,看到 GC 的日志信息,不会再那么陌生,能清楚地知道这些日志是什么意思,GC 线程当前处在哪个阶段,正在做什么事情等。
Bug开发工程师
2019/05/05
1.3K0
JVM 之 ParNew 和 CMS 日志分析
Java GC垃圾收集器的具体实现与日志案例分析(串行、并行、CMS、G1)
  串行GC对年轻代使用 mark-copy(标记-复制)算法,对老年代使用 mark-sweep-compact(标记- 清除-整理) 算法。 由于是单线程的垃圾收集器,不能进行并行处理,所以对年轻代和老年代的垃圾收集都会触发全线暂停(STW),停止所有的应用线程。因此这种GC算法不能充分利用多核CPU。不管有多少CPU内核,JVM 在垃圾收集时都只能使用单个核心。
砖业洋__
2023/05/06
6790
Java GC垃圾收集器的具体实现与日志案例分析(串行、并行、CMS、G1)
JAVA 性能调优 -- 带你解读 CMS GC 日志
连续两篇文章,我们介绍了 java 最为常用的两大垃圾收集器 -- CMS 与 G1:
用户3147702
2022/06/27
2.4K0
JAVA 性能调优 -- 带你解读 CMS GC 日志
JVM层GC调优(下)
本文是 JVM层GC调优(上) 的后续,在上一篇文章中,我们介绍了JVM的内存结构、常见的垃圾回收算法以及垃圾收集器和不同收集器中的一些GC调优参数。所以通过上文,我们也对GC相关的内容有了一定的了解。
端碗吹水
2020/09/23
1.1K0
JVM层GC调优(下)
Java 虚拟机之 CMS GC 调优解析
随着 JDK 版本的不断升级,其 GC 策略也随之不停革新,从早期的 1.4 到如今的 11(本文仅讨论在线上环境落地规模较大的版本),其对应的 GC 策略也随之由 Serial、Parallel、CMS 演进至当前的 G1 甚至即将落地的 ZGC 。每一次的调整无不是基于环境的适配性以及业务场景特性,无论如何,只要能够基于特定的操作系统内核、物理内存、JDK 版本以及业务特性,达到收益最大化,采用何种实现策略都不为过。当然,还是建议大家以官方的推荐为准,基于自己的业务场景进行不断优化调整,这样才能保证万无一失,使得我们的业务能够健康发展。
Luga Lee
2021/11/25
8390
Java 虚拟机之 CMS GC 调优解析
二谈 GC:从分区到 GC 事件
在 浅谈 JAVA 中的垃圾回收机制 这篇文章中,笔者从比较理论性的角度阐述了 JAVA 的垃圾回收机制。但在进行实践过程中,面对不同的业务场景,还是需要进行大量调整,以适应现实世界的场景和需求。本篇将进一步从垃圾回收的分区及算法角度,通过一个简单的例子,去剖析 JVM 需要做哪些类型的区域调整,才能安全地继续分配对象。
磊叔的技术博客
2025/06/09
400
二谈 GC:从分区到 GC 事件
Minor GC、Major GC和Full GC有何不同
目前,这些术语无论是在 JVM 规范还是在垃圾收集研究论文中都没有正式的定义。但是我们一看就知道这些在我们已经知道的基础之上做出的定义是正确的,Minor GC 清理年轻带内存应该被设计得简单:
余生大大
2022/11/02
5760
再次剖析 “一个 JVM 参数引发的频繁 CMS GC”
前几天这篇《一个 JVM 参数引发的频繁 CMS GC》文章发出之后,反应比较激烈,因为这可能与同学们通常 GC 优化经验相悖,通常有很多业务都通过添加 -XX:+CMSScavengeBeforeRemark 参数,来降低 CMS-remark 的时间,进而提升业务的性能以及可用性。
涤生
2019/04/26
6850
三谈 GC: GC 算法实现和日志
笔者在 浅谈 JAVA 中的垃圾回收机制 和 二谈 GC:从分区到 GC 事件 这两篇文章中,分别从比较理论性的角度、分区分代机制和 GC 事件对 GC 机制进行了阐述分析。本篇笔者从 GC 算法实现的角度进一步对此系列进行延续。
磊叔的技术博客
2025/06/09
670
三谈 GC:  GC 算法实现和日志
一个 JVM 参数引发的频繁 CMS GC
了解 CMS GC 的同学,一定知道 -XX:CMSScavengeBeforeRemark 参数,它是用来开启或关闭在 CMS-remark 阶段之前的清除(Young GC)尝试。
涤生
2019/04/26
8450
一个 JVM 参数引发的频繁 CMS GC
【愚公系列】2023年11月 大数据教学课程 012-JVM垃圾收集器以及内存分配
垃圾收集器是一种自动化程序,用于管理计算机内存中不再使用的数据,并在需要时回收它们。垃圾收集器有助于确保内存空间被充分利用,并且不会因为程序员的错误而产生内存泄漏问题。垃圾收集器可用于各种编程语言和平台,包括Java、Python、C#等。不同的垃圾收集器使用不同的回收算法,例如标记-清除、复制、标记-整理等。
愚公搬代码
2025/06/02
770
【愚公系列】2023年11月 大数据教学课程 012-JVM垃圾收集器以及内存分配
《Java Performance The Definitive Guide》GC部分读书笔记
最近断断续续看了《Java Performance The Definitive Guide》前六章,记录一下关于GC部分的读书笔记。
LNAmp
2018/09/05
5360
JVM中优化指南
Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代表(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。 我们以一个例子开始这篇文章。假设你是一个普通的Java对象,你出生在Eden区,在Eden区有许多和你差不多的小兄弟、小姐妹,可以把Eden区当成幼儿园,在这个幼儿园里大家玩了多长时间。Eden区不能无休止地放你们在里面,所以当年纪稍大,你就要被送到学校去上学,这里假设从小学到高中都称为Survivor区。开始的时候你在Survivor区里面划分出来的"From"区,读到高年级了,就进了Survivor区的“To”区,中间由于学习成绩不稳定,还经常来回折腾。直到你18岁的时候,高中毕业了,该去社会上闯闯了。于是你就去了年老代,年老代里面人也很多。在年老代里,你生活了20年(每次GC加一岁),最后寿终正寝,被GC回收。有一点没有提,你在年老代遇到了一个同学,他的名字叫爱德华(暮光之城里的帅哥吸血鬼),他以及他的家族永远不会死,那么他们就生活在永生代。 我认为优化JVM一定要抓住两点,第一点 :怎样缩短单次GC的时间;第二点 :怎样缩短GC频率。
海仔
2019/08/06
4460
JVM深入理解-内存调优与GC日志
TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为22283 的线程。
chengcheng222e
2021/11/04
4550
主动GC,需要吗
看一段线上的gc日志,这是一段CMS完整步骤的日志,对于GC日志格式,不了解的可以再温习一下《GC及JVM参数》
码农戏码
2021/03/23
5600
CMS回收器执行流程
CMS是老年代垃圾收集器,在收集过程中可以与用户线程并发操作。 它可以与 Serial 收集器 和 Parallel New收集器搭配使用。 CMS牺牲了系统的吞吐量来追求收集速度,适合追求垃圾收集速度的服务器上。 可以通过JVM启动参数,来开启CMS:
潇洒
2023/10/23
3350
CMS回收器执行流程
再次剖析 “一个 JVM 参数引发的频繁 CMS GC”
前几天这篇《一个 JVM 参数引发的频繁 CMS GC》文章发出之后,反应比较激烈,因为这可能与同学们通常 GC 优化经验相悖,通常有很多业务都通过添加 -XX:+CMSScavengeBeforeRemark 参数,来降低 CMS-remark 的时间,进而提升业务的性能以及可用性。
涤生
2019/04/15
9051
再次剖析 “一个 JVM 参数引发的频繁 CMS GC”
Java中的垃圾回收
转载自http://www.wolfbe.com/detail/201609/365.html
allsmallpig
2021/02/25
4290
一个 JVM 参数引发的频繁 CMS GC
了解 CMS GC 的同学,一定知道 -XX:CMSScavengeBeforeRemark 参数,它是用来开启或关闭在 CMS-remark 阶段之前的清除(Young GC)尝试。
涤生
2019/04/15
5.1K1
一个 JVM 参数引发的频繁 CMS GC
教你如何通过分析GC日志来进行JVM调优
不同的垃圾收集器产生的GC日志大致遵循了同一个规则,只是有些许不同,不过对于G1收集器的GC日志和其他垃圾收集器有较大差别,话不多说,正式进入正文。。。
肉眼品世界
2020/11/11
3.2K0
教你如何通过分析GC日志来进行JVM调优
相关推荐
JVM 之 ParNew 和 CMS 日志分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验