记录一次sharingjdbc引起的fullgc频繁问题,总结一下fullgc频繁解决的方案

本文主要是介绍记录一次sharingjdbc引起的fullgc频繁问题,总结一下fullgc频繁解决的方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:最近做了个需求,为了优化效率所以做了本地缓存和redis缓存,这个跟实际问题没有很大关系,但在排查问题时造成了一定的干扰,导致排查时间变长了,这个问题的现象是上线后cpu急剧增高,fullgc次数比younggc次数多,而且每次fullgc回收的内存很少,fullgc频繁。
1.问题现象图:
在这里插入图片描述
在这里插入图片描述
2.分析:通过gc的情况可以看出一直在进行fullgc而没有进行younggc,这种情况猜测是有大对象执行进入了老年代,而且在老年代回收时没有被回收掉,正好代码里也使用的本地缓存,在上之前是有计算本地缓存会占多大内存的,通过计算是不可能成为大对象,但出问题了也只能试试了,下面是解决问题的思路。
2.1把本地缓存减小,上一版之后观察了半小时没出问题,以为改好了,但过了一段时间又出现了。
2.2把本地缓存都去掉,上一台服务器之后观察了一下午没出问题,此时认为终于可以了,全量之后不久出问题。
2.3到此时就很头痛了,不知道从何下手,因为服务器的内存有14G,使用jmap命令dump下来文件过大,在本地分析不了内存情况,幸好此时同事提供一个命令:jmap -histo:live pid | head -n 100 // 查询前100个内存使用过高的java类,使用此命令一看才发现真正的问题所在:
在这里插入图片描述
这个SQLIgnoreExpression说明sharingjdbc在执行sql报错了,在报错之后不停的在创建这个对象。然后再通过打印sql发现in里面有个空list。查看代码:
在这里插入图片描述
这个地方没有判空,这也算是sharingjdbc的一大坑,集合一定要判空,所以in操作都判空之后就没有问题了。
总结:通过此次事件发现jmap -dump:format=b,file=e.bin pid这个命令的局限性了,因为一般生产上的内存都挺大,dump下来本地根本就分析不了,感觉jmap -histo:live pid | head -n 100 // 查询前100个内存使用过高的java类这个命令还是挺好使的,可以快速的找个大对象。

这篇关于记录一次sharingjdbc引起的fullgc频繁问题,总结一下fullgc频繁解决的方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/450262

相关文章

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr