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. ubantu 14.04中安装npm+node.js+react antd

    今天折腾了半天,各种安装问题,最终还是装上了: 1.安装npm $ sudo apt install npm 2.升级npm $ sudo npm install npm@latest -g 输入np ...

  2. 为NEO-GUI 添加插件系统

    作为一个NEO区块链技术爱好者,经常要摆弄NEOGUI,而NEOGUI在众多开发者手中有了众多的分支实现,我也有自己的分支改版.这是一件很麻烦的事情. 虽然NEO-GUI定位为一个演示客户端与开发工具 ...

  3. Android:PowerManager类 电源管理

    PowerManager类用于对设备电源状态进行管理:PowerManager.WakeLock类用于保持设备常亮:Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现 ...

  4. 潭州课堂25班:Ph201805201 django 项目 第二十三课 文章主页 轮播图前端实现 热门新闻推荐实现 详情页实现 (课堂笔记)

    前台代码 // 在static/js/news/index.js文件中 $(function () { // 新闻列表功能 let $newsLi = $(".news-nav ul li& ...

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

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

  6. 将分支推送到远程存储库时遇到错误: rejected Updates were rejected because the remote contains work that you do not have locally

    在仓库目录下执行 git pull origin master --allow-unrelated-histories 之后就可以成功的pull,push了

  7. Java 多线程 重入锁

    作为关键字synchronized的替代品(或者说是增强版),重入锁是synchronized的功能扩展.在JDK 1.5的早期版本中,重入锁的性能远远好于synchronized,但从JDK 1.6 ...

  8. Java 多线程 并发和并行

    并发和并行都可以表示执行多个任务,但是偏重点不同.并发偏重于多个任务交替执行,而多个任务之间有可能是串行的.并行是真正意义上的同时执行. 并发和并行示意图如下: 从严格意义上来说,并行的多个任务是真实 ...

  9. day8网络编程,面向对象1

    一.只是回顾 1.导入模块的顺序,首先从当前目录下找,再从环境变量里面找,使用"sys.path.insert(0,'需要导入的环境变量')"加入需要导入文件的环境变量; 2.如果 ...

  10. mac 本地跨域

    完全退出chrome后终端下输入以下命令: chrome49以前版本 open -a "Google Chrome" --args --disable-web-security c ...