代码编织梦想

昨天生产发布完后,收到告警短信5分钟内FullGc次数大于2次。当时一脸懵,应用上线前做过压力测试,没测出jvm fullgc问题啊。所以按照告警时间去查日志,发现基本为spring初始化动作。

后面过了半个小时也没有收到告警,基本猜测是meta区的问题

下面是定位过程。

1,首先ps -ef|grep java
cd /opt/wildfly/openjdk/openjdk-1.8.0_92/bin


2,[root@uqotsxgs1a01 bin]# ./jmap -heap 111255
Attaching to process ID 111255, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.92-b00

using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 4294967296 (4096.0MB)
NewSize = 174456832 (166.375MB)
MaxNewSize = 174456832 (166.375MB)
OldSize = 4120510464 (3929.625MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)(初始meta大小为20M)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)

3,查看实际meta大小
[root@uqotsxgs1a01 bin]# ./jstat -gccapacity 111255
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 
170368.0 170368.0 170368.0 17024.0 17024.0 136320.0 4023936.0 4023936.0 4023936.0 4023936.0 0.0 1202176.0 172332.0 0.0 1048576.0 19756.0 1951 7
[root@uqotsxgs1a01 bin]# ./jstat -gc 111255
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 
17024.0 17024.0 0.0 938.0 136320.0 13046.0 4023936.0 225361.8 172332.0 160840.8 19756.0 16833.0 1951 61.236 7 0.799 62.035


而 实际 meta可用为173M,实际已用160M,Fullgc次数为 7.。所以问题很明显,随着加载类的增多,我们的应用meta区远超过20m的大小,所以会触发fullgc,扩容metaspace。至此,问题已经很明确,因为jdk1.8的默认参数,导致需要扩容meta区,因此出现了fullgc。

4,修改meta区大小,重启服务
JAVA_OPTS="$JAVA_OPTS -Xms4096m -Xmx4096m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"


5,查看修改的Fullgc次数 为 1,解决。
[root@uqotsxgs1a01 bin]# ./jstat -gc 35656
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 
17024.0 17024.0 3228.8 0.0 136320.0 100896.4 4023936.0 195764.5 159616.0 150182.8 18816.0 16251.0 84 4.365 1 0.578 4.943

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/clz1314521/article/details/129625333

问题解决:full gc固定10小时执行一次问题解决记录-爱代码爱编程

文章目录 一.问题描述二.问题排查1.问题猜测2.源码分析 三.解决办法 一.问题描述 环境:JDK1.8、CentOS 6.9、容器undertow、Spring boot 1.5.8

一次jvm堆内存飙升垃圾收集器未进行fullgc问题处理-爱代码爱编程

一、问题现场 在项目中有一个单节点的task服务,这服务有由于架构原因无法实现多节点部署,该服务每隔2个月左右时间会出现异常,内存一直飙升,但jvm 并没有进行full gc ,直至服务tomcat 出现假死,服务异常。

记录一次生产服务器cpu400%满负荷处理过程-爱代码爱编程

记录一次生产服务器CPU400%满负荷处理过程 文章目录 记录一次生产服务器CPU400%满负荷处理过程步骤猜测解决方法反思总结 步骤 top命令 31779进程 占 CPU 361% ,通过最后的C

记录一次线上GC问题-爱代码爱编程

CMS垃圾回收器: 采用CMS时候,新生代必须使用Serial GC或者ParNew GC两种。CMS共有七个步骤,只有Initial Marking和Final Marking两个阶段是stop-the-world的,其他步骤均和应用并行进行。持久代的GC也采用CMS,通过-XX:CMSPermGenSweepingEnabled -XX:CMSC

Full GC 和 Minor GC-爱代码爱编程

目录 Full GC Full GC的触发条件 Minor GC 触发条件 Minor GC的过程 Survivor区对象晋升位老年代对象的条件 Minor GC的问题与卡表分析 关于 Major GC的说明 小结 参考资料 & 鸣谢 Full GC Full GC 就是收集整个堆,包括新生代,老年代等收集所有部分的模式

Minor GC、Major GC和Full GC之间的区别-爱代码爱编程

原文链接: javacodegeeks 翻译: ImportNew.com - 光光头去打酱油译文链接: http://www.importnew.com/15820.html 文章要求读者熟悉 JVM 内置的通用垃圾回收原则。堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,代假设和其他不同的 GC 算法超出了本文讨论的范围。

记一次生产频繁出现 Full GC 的 GC日志图文详解-爱代码爱编程

目录: 1. 场景描述 2. 正文 2.1 生产 GC 日志文件 2.2 JVM 内存结构解析 2.3 生产环境配置 2.4 生产 JVM 内存参数设置 2.5 图解分析一条 GC 日志 2.6 CMS 垃圾回收器回收过程解析 2.7 pinpoint 生产系统内存监控图 2.8 ParNew + CMS 回收器组合及分析生产问题

记录一次jvm调优过程-爱代码爱编程

1.查看gc情况: 结果:服务启动时长是1天,进行了3240左右次minorGC,一共使用时间80s左右。也就是一次minirGC时间是0.02s,FGC是一次,时间是2.2s,fullGC时间过长,需要优化。 1.为什么需要优化: FGC会不会导致请求失败? 1.1查看GC方式是什么: 新生代使用的是PS Young Generation回收器,也就是P

RMI强制Full GC每小时运行一次-爱代码爱编程

在我职业生涯中进行的所有故障排除练习中,我感到随着时间的推移,我所追寻的错误在不断发展,变得越来越卑鄙和丑陋。 也许仅仅是我的年龄开始了。这个特别的Heisenbug –看起来像这篇帖子一样,再次让我清醒了很多,而不是我想要的。 与其他特别令人讨厌的错误一样,我现在遇到的那个错误的症状是“有时系统运行缓慢”。

java 手动触发gc_java触发full gc的几种情况整理-爱代码爱编程

前言 近期被问及这个问题,在此记录整理一下。 System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full GC的频率,也即增加了间歇性停顿的次数。强烈影响系建议能不使用此方法就别使用,让虚拟机自己去管理它的内存,可通过通过-XX:+ DisableEx

java什么时候full gc_java触发full gc的几种情况概述-爱代码爱编程

前言 近期被问及这个问题,在此记录整理一下。 System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full GC的频率,也即增加了间歇性停顿的次数。强烈影响系建议能不使用此方法就别使用,让虚拟机自己去管理它的内存,可通过通过-XX:+ DisableEx

JVM系列-调优实战案例:频繁FullGC和OOM案例-爱代码爱编程

JVM调优是面试中常问的问题,同时也是实际工作中可能遇到的难题,本文简单介绍JVM调优在实战中的应用。 一、JVM调优的目标 在程序上线前,需要根据需求预估用户数和并发量,并按照这个目标对JVM进行规划和预调优;同时程序运行时间久了,可能会出现程序卡顿、访问变慢等情况;严重时会出现OOM导致程序崩溃。这些情况都需要进行JVM的调优。 调优的目标通常有

一次服务器上g1回收器发生fullgc的粗浅理解与记录-爱代码爱编程

1.现场监控截图 由上面两张图可以看出, 1. old区内存使用并不多,为何会fullgc。 2.年轻代确实没有进行gc,所以可以确定当时确实进行了fullgc。 2.gc log 我们服务器使用的是g1回收器,找到当时时间节点的gc log,截图如下: 3.分析log,提出问题 我们从监控中可以看到,fullgc时: 总计堆内存20

【问题记录】测试 tensorflow-gpu版:attributeerror: module ‘tensorflow‘ has no attribute ‘session‘_追光者♂的博客-爱代码爱编程

挺有意思,解决一个问题后,就又出现了 新的问题,解决新的问题后,就…又出现了新的问题…直到问题挨个解决 目录 -->> 本机TensorFlow 及其 GPU版本

jvm实战(十一):full gc导致频繁卡死的优化实战_jvm清除的时候程序会卡住?-爱代码爱编程

目录 1、实战:每秒十万QPS的社交APP如何优化GC性能提升3倍? 1.1、项目背景 1.2、高并发查询导致对象快速进入老年代 1.3、老年代必然会触发频繁GC 1.4、优化前的线上系统JVM参数 1.5、频繁Full GC导致的大量内存碎片 1.6、这个案例如何进行优化? 2、垂直电商APP后台系统,如何对Full GC进行深度优化?

jvm优化-爱代码爱编程

jvm优化的是什么 其实无论什么垃圾回收器调优都是减少STW时间。而Old GC的STW时间一般是YoungGC的几倍到几十倍,而且占用CPU资源严重。所以,我们优化的重点是让系统减少Old GC的次数。最好让系统只有Yo

hbase-爱代码爱编程

1、 简介 跳跃表(SkipList)是一种能高效实现插入、删除、查找的内存数据结构,这些操作的期望复杂度都是O(logN)。与红黑树以及其他的二分查找树相比,跳跃表的优势在于实现简单,而且在并发场景下加锁粒度更小,