记一次ssl方式导致的堆外内存泄露

在巡检的时候突然发现现网某业务使用内存大约6G,问题是我们配置的-Xmx=2G,metaspace没配置,从GC日志看

第一次提交的最大metaspace为1G,假设都使用了,堆外内存最小也有3G了
定位步骤
1.查看/proc/${pid}/smaps文件(pmap命令也类似)
发现20来个65536KB的块

而且连续观察到64M块和内存增长量也符合,搜到案例  http://blog.11034.org/2016-09/64bits_linux_arena_memory.html ,预计可以解决;

2.那么这些65536的块里内容是啥呢?
现网业务暂时还没挂,缓慢增长中,看测试环境有类似问题,果断core一个文件下来看看
gdb后
attach xxx
gcore core.xxx
detach
然后就生成了core.xxx文件,然后 gdb -core core.xxx ,
x/1000s 0x7f75b0000000  (其中7f75b0000000为smap中的起始地址)

然后能够看到很多证书相关内容

想到最近版本修改CSE的ssl方式为openssl,于是去掉ssl方式修改为jdk方式,现网重启,观察一天后问题修复

后续直接联系cse的开发,经过他测试确认,netty-tcnative-boringssl-static-2.0.7.Final.jar版本有bug,后续需要升级cse解决。

这次问题比较麻烦的地方有2个:

1.现网几乎所有微服务内存缓慢增长,测试环境只有2个微服务有问题,而且运行了2周才出现,修改参数重启的方式,在测试环境上没法验证

2.现网内存虽然在增加,但是没挂,也就没堆栈可以看,庆幸有gdb搞一把保存了现场看内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值