1. 问题背景
线上出现内存报警,通过dump文件,MAT分析,发现mysql-connector-java 有内存泄漏问题
2.问题分析
然后看大对象列表,NonRegisteringDriver 对象确实占内存比较多,里面村的数据库连接的虚引用占比较多
3.解决方案
升级mysql-connector-java版本至8.0.31以及以上的版本,在java启动命令添加命令行,
-Dcom.mysql.cj.disableAbandonedConnectionCleanup=true
如下图:
java -Dcom.mysql.cj.disableAbandonedConnectionCleanup=true -jar app.jar
这样,生成数据库连接时就不会产生虚引用