虚引用 mysql驱动_数据库连接池配置错误导致OOM

一、背景介绍:

运行在k8s集群中负责支付业务一个服务,运营一段时间就会被k8s kill,然后重启, 通过查看k8s 的event发现系统达到了memory到达了上限被集群kill调。

服务配置:jdk:1.8、堆内存:-Xmx800m -Xms800m 设置为800M,  k8s的memory.limit设置为1G。

二、排查问题:

1.初步分析: 由于系统的请求量不大,所以设置的堆内存足够了,所以可以排除堆内存设置过小原因。同时由于服务被kill的原因是因为物理内存占用过大。所以怀疑是堆外内存溢出。

jvm内存结构分为:堆内存(新生代、老年代), 堆外内存(线程栈、元空间、直接内存)

2.排查:

2.1 gc状态分析:jstat -gcutil pid 5s

结果:各区域的占用情况,gc情况无明显异常

2.2 堆dump: jmap -dump:format=b,file=heap.hprof  pid, 使用mat分析如下:

cbd403202c692a4b33986542b0b6ecc1.png

很明显 com.mysql.jdbc.NonRegisteringDriver占用堆内存的33%。其中java.util.concurrent.ConcurrentHashMap$Node[] 存在内存泄漏的可能。

ConcurrentHashMap connectionPhantomRefs 保存mysql co

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值