Metadata GC Threshold导致的full gc分析
gc log
两次full gc 均是Metadata GC导致,
OpenJDK 64-Bit Server VM (25.151-b12) for linux-amd64 JRE (1.8.0_151-b12), built on Oct 20 2017 13:44:55 by "mockbuild" with gcc 4.8.5 20150623 (Red Hat 4.8.5-16) Memory: 4k page, physical 32768212k(24960168k free), swap 16777212k(16777212k free) CommandLine flags: -XX:InitialHeapSize=4294967296 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1415577600 -XX:NewSize=1415577600 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=6 -XX:-UseAdaptiveSizePolicy -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC 3.239: [GC (Metadata GC Threshold) [PSYoungGen: 580899K->44848K(1209856K)] 580899K->44936K(4021760K), 0.0709512 secs] [Times: user=0.28 sys=0.05, real=0.07 secs] 3.310: [Full GC (Metadata GC Threshold) [PSYoungGen: 44848K->0K(1209856K)] [ParOldGen: 88K->42742K(2811904K)] 44936K->42742K(4021760K), [Metaspace: 20807K->20807K(1069056K)], 0.0687655 secs] [Times: user=0.53 sys=0.06, real=0.07 secs] 4.877: [GC (Metadata GC Threshold) [PSYoungGen: 295888K->14853K(1209856K)] 338631K->57604K(4021760K), 0.0168992 secs] [Times: user=0.10 sys=0.04, real=0.01 secs] 4.894: [Full GC (Metadata GC Threshold) [PSYoungGen: 14853K->0K(1209856K)] [ParOldGen: 42750K->19141K(2811904K)] 57604K->19141K(4021760K), [Metaspace: 34824K->34824K(1081344K)], 0.0531168 secs] [Times: user=0.39 sys=0.02, real=0.06 secs] 176.369: [GC (Allocation Failure) [PSYoungGen: 1037312K->21557K(1209856K)] 1056453K->40706K(4021760K), 0.0291270 secs] [Times: user=0.21 sys=0.01, real=0.03 secs] 179.483: [GC (Allocation Failure) [PSYoungGen: 1058869K->34528K(1209856K)] 1078018K->53685K(4021760K), 0.0485665 secs] [Times: user=0.16 sys=0.13, real=0.05 secs] 182.920: [GC (Allocation Failure) [PSYoungGen: 1071840K->47968K(1209856K)] 1090997K->67125K(4021760K), 0.0436580 secs] [Times: user=0.22 sys=0.00, real=0.04 secs] 186.455: [GC (Allocation Failure) [PSYoungGen: 1085280K->62016K(1209856K)] 1104437K->81181K(4021760K), 0.0642786 secs] [Times: user=0.25 sys=0.23, real=0.07 secs] 190.285: [GC (Allocation Failure) [PSYoungGen: 1099328K->77280K(1209856K)] 1118493K->96445K(4021760K), 0.0695328 secs] [Times: user=0.35 sys=0.21, real=0.07 secs]
加上 Metadata的配置参数: -XX:MetaspaceSize=128M
附上 metadata的配置说明
从JDK8开始,永久代(PermGen)的概念被废弃掉了,取而代之的是一个称为Metaspace
的存储空间。Metaspace
使用的是本地内存,而不是堆内存,也就是说在默认情况下Metaspace
的大小只与本地内存大小有关。当然你也可以通过以下的几个参数对Metaspace
进行控制:
* -XX:MetaspaceSize=N *
这个参数是初始化的Metaspace大小,该值越大触发Metaspace GC的时机就越晚。随着GC的到来,虚拟机会根据实际情况调控Metaspace的大小,可能增加上线也可能降低。在默认情况下,这个值大小根据不同的平台在12M到20M
浮动。使用java -XX:+PrintFlagsInitial
命令查看本机的初始化参数,-XX:Metaspacesize
为21810376B
(大约20.8M)。
-XX:MaxMetaspaceSize=N
这个参数用于限制Metaspace增长的上限,防止因为某些情况导致Metaspace无限的使用本地内存,影响到其他程序。在本机上该参数的默认值为4294967295B(大约4096MB)。
-XX:MinMetaspaceFreeRatio=N
当进行过Metaspace GC之后,会计算当前Metaspace的空闲空间比,如果空闲比小于这个参数,那么虚拟机将增长Metaspace的大小。在本机该参数的默认值为40,也就是40%。设置该参数可以控制Metaspace的增长的速度,太小的值会导致Metaspace增长的缓慢,Metaspace的使用逐渐趋于饱和,可能会影响之后类的加载。而太大的值会导致Metaspace增长的过快,浪费内存。
-XX:MaxMetasaceFreeRatio=N
当进行过Metaspace GC之后, 会计算当前Metaspace的空闲空间比,如果空闲比大于这个参数,那么虚拟机会释放Metaspace的部分空间。在本机该参数的默认值为70,也就是70%。
-XX:MaxMetaspaceExpansion=N
Metaspace增长时的最大幅度。在本机上该参数的默认值为5452592B(大约为5MB)。
-XX:MinMetaspaceExpansion=N
Metaspace增长时的最小幅度。在本机上该参数的默认值为340784B(大约330KB为)。
Metadata GC Threshold导致的full gc分析相关推荐
- 频繁GC (Allocation Failure)及young gc时间过长分析
序 本文主要分析一个频繁GC (Allocation Failure)及young gc时间过长的case. 症状 gc throughput percent逐步下降,从一般的99.96%逐步下降,跌 ...
- 求求你了,配个GC日志呗,不然咋分析故障原因
点击关注公众号,Java干货及时送达 生产环境上,或者其他要测试 GC 问题的环境上,一定会配置上打印GC日志的参数,便于分析 GC 相关的问题. 但是可能很多人配置的都不够"完美" ...
- 如何查看yarn container日志 查看yarn任务所有container信息 yarn gc日志的查看和简单分析
查看yarn任务日志 任务运行中和结束时查看container的日志 GC日志的简单分析 文章目录 一.shell和yarn基础命令准备 二.app日志查看 1. 直接使用yarn logs,可选择指 ...
- GC分类、TLAB、逃逸分析、栈上分配、同步消除、标量替换
GC分类 JVM的调优的一个环节,也就是垃圾收集,我们需要尽量的避免垃圾回收,因为在垃圾回收的过程中,容易出现STW(Stop the World)的问题,而 Major GC 和 Full GC出现 ...
- GC 疑难情况问题排查与分析(上篇)
本章介绍导致 GC 性能问题的典型情况.相关示例都来源于生产环境,为演示需要做了一定程度的精简. 名词说明:Allocation Rate,翻译为"分配速率",而不是分配率.因为不 ...
- GC暂停时间过长——排查分析
告警 本次GC日志分析 2022-11-17T17:58:50.518+0800: 1217960.132: [GC (Allocation Failure) 2022-11-17T17:58:50. ...
- GC 调优(实战篇) - GC参考手册
说明: Allocation Rate, 翻译为分配速率, 而不是分配率; 因为不是百分比,而是单位时间内分配的量; 同理, Promotion Rate 翻译为 提升速率; 您应该已经阅读了前面的章 ...
- 0 full gc时cpu idle_结合GC日志讲讲CMS垃圾收集器
1 CMS垃圾收集器介绍 CMS(Concurrent Mark Sweep)收集器旨在获取最短回收停顿时间的并发垃圾收集器.CMS基于"标记-清除"算法实现,并发指的是CMS的垃 ...
- 7. GC 调优(实战篇) - GC参考手册
本章介绍导致GC性能问题的典型情况.相关示例都来源于生产环境, 为演示需要做了一定程度的精简. 说明: Allocation Rate, 翻译为分配速率, 而不是分配率; 因为不是百分比,而是单位时间 ...
最新文章
- 从中心走向边缘——深度解析云原生边缘计算落地痛点
- 3D 鼠标跟随脚本详解
- Java 11新特性_java 11 值得关注的新特性
- linux下如何挂载格式化内存卡,Linux下磁盘挂载格式化
- 天寒宜早睡,梦醒闻雪声,倒计时83
- 用CocoaPods安装ReactiveCocoa遇到的问题
- leetcode[35]搜索插入位置/Search Insert Position 暴力和二分法详解
- 用 Handler 给图片加水印
- 空对地(air-to-ground,A2G)通信发展概况与面临挑战
- python设计模式之MVC
- 如何与亦敌亦友的 null 说拜拜?大神原来是这么做的!
- Oracle中对时间操作的一些总结
- 曾维沛全网营销推广如何做?微商精准引流,让客户主动找上门
- 什么是GPU服务器?如何正确选择?
- 局域网唤醒 外网无法唤醒_为您的网络设置局域网唤醒控制面板
- 基因编辑c语言,基因编辑为何失败?那是因为Cas9霸着C位
- 氚云CRM管理员手册
- 工程师评测 | RK3568开发板上手测试
- 【题解】CH5202 自然数拆分Lunatic版 完全背包
- php计算根据出生日期计算年龄