gc log

两次full gc 均是Metadata GC导致,

OpenJDK -Bit Server VM (25.151-b12) for linux-amd64 JRE (1.8.0_151-b12), built on Oct   :: by "mockbuild" with gcc 4.8.  (Red Hat 4.8.-)
Memory: 4k page, physical 32768212k(24960168k free), swap 16777212k(16777212k free)
CommandLine flags: -XX:InitialHeapSize= -XX:MaxHeapSize= -XX:MaxNewSize= -XX:NewSize= -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio= -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:Metaspacesize21810376B(大约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分析的更多相关文章

  1. hadoop从调整GC到关键Counter计算原理分析

     hadoop集群中发现使用Parallel Scavenge+Parallel Old收集器组合进行垃圾收集(这也是server端jvm默认的GC方式)时CPU占用可能会非常高,偶尔会出现爆满的状态 ...

  2. JVM系列【6】GC与调优5-日志分析

    JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 主要内容 分析PS.CMS.G1的回收日志,目标使大概能读懂GC日志. 测 ...

  3. Go语言GC实现原理及源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/475 本文使用的 Go 的源码1.15.7 介绍 三色标记法 三色标 ...

  4. JVM 输出 GC 日志导致 JVM 卡住,我 TM 人傻了

    本系列是 我TM人傻了 系列第七期[捂脸],往期精彩回顾: 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了:https://zhuanlan.zhihu.com/p/3970425 ...

  5. Java GC - 监控回收行为与日志分析

    1. 简介 在上一篇介绍<Java GC - 垃圾回收机制>, 本文将介绍如何监控 Javc GC 行为,同时涉及一些GUI工具的使用(虽然有些已经很老并不再更新),监控GC在于判断JVM ...

  6. Java GC 专家系列3:GC调优实践

    本篇是”GC专家系列“的第三篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种G ...

  7. Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践

    protobuf-net优化效果图 protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的 ...

  8. 深入浅出 JVM GC(4)常用 GC 参数介绍

    # 前言 从前面的3篇文章中,我们分析了5个垃圾收集器,还有一些 GC 的算法,那么,在 GC 调优中,我们肯定会先判断哪里出现的问题,然后再根据出现的问题进行调优,而调优的手段就是 JVM 提供给我 ...

  9. 6. GC 调优(工具篇) - GC參考手冊

    进行GC性能调优时, 须要明白了解, 当前的GC行为对系统和用户有多大的影响. 有多种监控GC的工具和方法, 本章将逐一介绍经常使用的工具. 您应该已经阅读了前面的章节: 垃圾收集简单介绍 - GC參 ...

随机推荐

  1. shell 脚本使用记录

    2019-03-26 需求是:因为遇到一些测试偶发性的出现,比如执行了20次会出一次错误,然后就顺手写了一个小脚本,用来判断执行了 n 次,是否出现错误.根据正则来匹配出substring value ...

  2. 蓝桥杯 ——无重复组合——C++

    问题描述: 求任意长度的(ABCD.....)全部n=0,1,2 ....组合情况(n小于等于串的长度) 解决思路: 如果串的长度固定,n的值固定循环嵌套 在这里以深度优先形成一棵树,如下图: 源代码 ...

  3. DevC++出现[Error] ld returned 1 exit status,如何解决才好呢?

    回答: 代码在vc中没问题,虽然没用过DevC++. 可以把 ld returned 1 exit status前面的详细出错说出来程序是没有问题的,可能的问题最有可能是以下2个1.是你的程序已经在运 ...

  4. [USACO08OPEN]寻宝之路Clear And Present Danger

    OJ题号:洛谷2910 思路:Floyd #include<cstdio> #include<algorithm> using namespace std; int main( ...

  5. Markdown指南

    Markdown 指南 前几天学习了markdown,然后一直在用,很喜欢这种格式即内容的写作形式.在简书写了几篇,对固定链接的格式很不满意,于是寻找能够支持markdown.固定链接显格式.支持自定 ...

  6. centos7下安装配置redis

    1.1. Redis下载安装(linux) 1.1.1. 下载: 下载地址:https://redis.io/download 选择合适的版本下载,如下图: 1.1.2. 安装: (1)把下载好的re ...

  7. 【原】通过AOP实现MyBatis多数据源的动态切换

    [环境参数]1.开发框架:Spring + SpringMVC + MyBatis 2.数据库A的URL:jdbc.url=jdbc:mysql://172.16.17.164:3306/ test? ...

  8. 微信小程序-转发

    仅供参考 1,js: onShareAppMessage(res) { return { title: '我在使用俺搜·找客户,10万+材料人都在用,就差你了', path: '/pages/inde ...

  9. openstack 之~keystone之网关协议

    第一:静态页面和动态页面 上一篇博客介绍了HTTP后,我们知道一个web server的本质就是 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作为HTTP ...

  10. Servlet(2)—java项目下web应用程序

    在java项目下手动写一个web程序 步骤: ①创建一个java项目并在根目录创建一个WebContent目录文件 ②WebContent下创建WEB-INF目录文件 ③WEB-INF下创建class ...