CMS 触发GC(Allocation Failure)解析

简介: 针对GC中发生的"Allocation Failure"

       针对GC中发生的"Allocation Failure",源码描述为:Allocation Failure is a cause of GC cycle to kick in.        "Allocation Failure" means that no more space left in Eden to allocate object. So, it is normal cause of young GC.        Older JVM were not printing GC cause for minor GC cycles.        "Allocation Failure" is almost only possible cause for minor GC. Another reason for minor GC to kick could be CMS remark phase (if +XX:+ScavengeBeforeRemark is enabled).

       分代收集器:

       ParNew:一款多线程的收集器,采用复制算法,主要工作在 Young 区,可以通过使用

-XX:ParallelGCThreads 参数来控制收集的线程数,整个过程都是STW的,常与CMS组合使用。

       CMS:以获取最短回收停顿时间为目标,采用“标记-清除”算法,分 4 大步进行垃圾收集,其中初始标记和重新标记会 STW ,多数应用于互联网站或者 B/S 系统的服务器端上,JDK9 被标记弃用,JDK14 被删除,详情可见 JEP 363

  •  业务场景


393537.923: [GC (Allocation Failure) 393537.923: [ParNew: 277920K->5804K(306688K), 0.0254145 secs] 1619294K->1347211K(2063104K), 0.0257722 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
394659.416: [GC (Allocation Failure) 394659.416: [ParNew: 278444K->5412K(306688K), 0.0189196 secs] 1619851K->1346850K(2063104K), 0.0192075 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
395824.591: [GC (Allocation Failure) 395824.591: [ParNew: 278052K->5905K(306688K), 0.0227978 secs] 1619490K->1347361K(2063104K), 0.0231599 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
396658.661: [GC (Allocation Failure) 396658.661: [ParNew: 278545K->4291K(306688K), 0.0194256 secs] 1620001K->1345779K(2063104K), 0.0197811 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
397674.141: [GC (Allocation Failure) 397674.141: [ParNew: 276931K->5287K(306688K), 0.0213385 secs] 1618419K->1346807K(2063104K), 0.0216235 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]

  •    日志解析
  • GC前面没有Full修饰,表明此应用服务进行了一次Minor GC 。注意它不表示只GC新生代,并且现有的不管是新生代还是老年代都会STW        
  • Allocation Failure: 表明引起本次应用GC的原因是因为在年轻代中没有足够的空间能够存储新的数据。        
  • ParNew: 表明本次GC发生在年轻代并且使用的是ParNew垃圾收集器。ParNew是一个Serial收集器的多线程版本,会使用多个CPU和线程完成垃圾收集工作(默认使用的线程数和CPU数相同,可以使用-XX:ParallelGCThreads参数限制)。该收集器采用复制算法回收内存,期间会停止其他工作线程,即Stop The World        
  • 277920K->5804K(306688K)单位为KB。三个参数分别为:GC前该内存区域(这里是年轻代)使用容量,GC后该内存区域使用容量,该内存区域总容量。        
  • 0.0254145 secs:表明内存区域GC耗时,单位是秒。        
  • 1619294K->1347211K(2063104K):三个参数分别为:堆区垃圾回收前的大小,堆区垃圾回收后的大小,堆区总大小。        
  • 0.0257722 secs:该内存区域GC耗时,单位是秒。        
  • [Times: user=0.05 sys=0.00, real=0.02 secs]:分别表示用户态耗时,内核态耗时以及总耗时
  • 根据gc log文件分析可以得出结论:        
  • (1)该次GC新生代减少了277920K - 5804K = 272116K        
  • (2)该次GC Heap区总共减少了1619294K - 1347211K = 272083K        272116 – 272083 = 33K,说明该次共有33K内存从年轻代移到了老年代,可以得出数量并不多,说明都是生命周期短的对象,只是这种对象较多
  •  
  •    解决方案

     (1)   尽量避免Full GC的发生,让对象尽可能的在年轻代就回收掉,此处,可适当增加年轻代-Xmn的大小,让那33K的数据也保存在年轻代中。        

     (2)   优化分析代码,将可疑对象揪出来。



相关文章
|
存储 监控 算法
深入解析JVM内部结构及GC机制的实战应用
深入解析JVM内部结构及GC机制的实战应用
|
算法 Java UED
深入解析CMS垃圾回收器
在CMS之前的垃圾回收器,要么就是串行垃圾回收方式,要么就是关注系统吞吐量,而 CMS 垃圾回收器的出现,则打破了这个尴尬的局面。
722 0
深入解析CMS垃圾回收器
|
前端开发 Java
Java虚拟机 CMS GC 调优解析
随着 JDK 版本的不断升级,其 GC 策略也随之不停革新,从早期的 1.4 到如今的 11(本文仅讨论在线上环境落地规模较大的版本),其对应的 GC 策略也随之由 Serial、Parallel、CMS 演进至当前的 G1 甚至即将落地的 ZGC 。每一次的调整无不是基于环境的适配性以及业务场景特性,无论如何,只要能够基于特定的操作系统内核、物理内存、JDK版本以及业务特性,达到收益最大化,采用何种实现策略都不为过。当然,还是建议大家以官方的推荐为准,基于自己的业务场景进行不断优化调整,这样才能保证万无一失,使得我们的业务能够健康发展。
543 0
|
缓存 算法 Java
JVM CMS GC算法解析
JVM CMS GC算法解析
286 0
|
存储 监控 算法
Java虚拟机 G1 GC 调优解析
在上篇文章中,我们解析了 Java 虚拟机体系生态中基于 CMS GC 策略的调优场景及基本案例,具体链接为:Java虚拟机 CMS GC 调优解析。本文则重点介绍另一款当前比较流行的 GC 策略 - G1。
842 0
|
监控 Java Unix
Java GC Log Time解析
通常,我们在了解应用服务的性能时,都会去在所定义的垃圾收集日志文件中去分析GC活动轨迹,在gc.log文件中,我们经常会看到每个GC事件所打印的三种时间类型: “ User ”、“ Sys ”及“ Real ”,它们分别表示什么呢?具有哪些象征性意义呢?本文将结合作者的相关实际经验进行简要解析,希望阅读完本篇文章后对大家在GC Log这块的问题定位与分析有所帮助。
563 0
|
机器学习/深度学习 人工智能 监控
GC日志分析工具-GCeasy解析
一款新的GC日志分析仪器,业界首个基于人工智能机器学习指导的垃圾收集日志分析工具。 GCeasy具有内置的智能功能,可以自动检测JVM和Android GC日志中的问题并为之推荐解决方案。
1621 0
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
961 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1597 29
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
648 4

热门文章

最新文章

推荐镜像

更多
  • DNS