登录
首页 >  数据库 >  MySQL

DBCP连接池产生大量未被回收对象

来源:SegmentFault

时间:2023-02-17 14:09:53 142浏览 收藏

大家好,今天本人给大家带来文章《DBCP连接池产生大量未被回收对象》,文中内容主要涉及到MySQL、Java,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

有段时间线上出现Full GC时间过长导致系统响应慢,这里先粗略的记录下相关信息:
jvm参数配置:
Xms与Xmx相同:4096m
Xmn:1576m
非堆:512
垃圾回收器使用的是CMS
基本上两天老年代会增长近2G未回收的对象,dump出来的文件里存在大量的数据库连接对象:connectionPhantomRefs,后来换成公司自研的数据库连接池观察两天后老年代使用量基本上维持在256M,下面是dump文件有关内容:


点击CurrentHashMap,右键后List objects > with incoming references查看是哪些对象引用了该对象

可以明显看到是connectionPhantomRefs

这里有几个疑问还需要搞明白:
1,连接池配置了连接数量的上下限和存活时间,为什么还会产生这么多的连接对象
2,这么多的连接对象为什么没被及时回收
贴几个相关的连接:
https://blog.csdn.net/yl_hahh...
里面有分析引用list objects :
with incoming references 将列出哪些类引入该类;
with outgoing references 列出该类引用了哪些类
https://blog.csdn.net/u010657...
这里有提到mysql-connector-java 5.1.46启用线程去不断地清理被 GC 的数据库连接
https://zhuanlan.zhihu.com/p/...
这里有提到DirectByteBuffer的堆外内存的回收,就是依赖PhantomReference实现

终于介绍完啦!小伙伴们,这篇关于《DBCP连接池产生大量未被回收对象》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布数据库相关知识,快来关注吧!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表