Jedis的socket内存泄露的这些坑,别说你没遇到过!

本文详细介绍了在业务线上环境中遇到的Jedis导致的Socket内存泄露问题,通过步骤分析了问题的原因,包括Jedis连接池配置、 Commons-Pool的空闲对象驱逐机制以及Finalizer对内存回收的影响。最终,作者强调了不应忽视任何微小问题的重要性。
摘要由CSDN通过智能技术生成

本文是关于Jedis的socket内存泄露问题排查的分享。

背景

业务线上有N台机器。其中有一台会缓慢的出现Socket内存泄露。具体表现为在jmap时会常常看到如下类排名很靠前。

5: 274623 30757776 java.net.SocksSocketImpl 8: 274621 13181808 java.net.SocketInputStream 9: 274621 13181808 java.net.SocketOutputStream 17: 274621 8787872 java.net.Socket 21: 274668 6592032 java.net.Inet4Address

从占用数量以及内存情况来说。其实完全是可以接受的。但是不能理解的是为什么就单独这台机器占用偏高。其他机器也有一定的数量,但是和这台机器差别较多。

STEP0

这一台机器唯一和别的机器不同的是:

该机器周期性的在本机进程内执行一些数据逻辑。每5分钟调度一次,每次大概执行1分多钟。所以相比其他机器,他的YGC相对会频繁一点。大约10秒左右触发一次。而其他机器大概是1分钟触发一次。

STEP1

既然创建了这么多的socket相关对象。那需要看看是谁在不停的创建。这里可以使用开源的btrace或者其他instrument工具进行运行时监控(PS: 如果对于instrument和agent感兴趣的可以看此文如何开发一款java应用运行时的监控程序https://juejin.im/entry/5bd7f9156fb9a05d185f3a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值