websocket影响内存泄漏的两个点

前段时间一直遇到websocket的内存溢出问题,最后在排除了代码的问题之后,开始查找了框架的问题,最后找到了两个框架会影响到的坑,mark一下,顺便分享给大家

首先说项目:springboot的内置tomcat启动,用的websocket是tomcat内核,spring封装。

现象:启动项目后使用的时候cpu使用率不断增加达到99%,最后长时间运行由于CPU过高,导致无法访问最后报出OOM。使用jstat可以查看到由于新生代不断增长导致频繁gc使cpu使用率过高。

但究其原因是什么?

1.websocket设置

首先是网上查资料,找到一篇这样的帖子,点击这里。这是tomcat的一个设置


默认tomcat为8*1024KB,为了使客户端和服务器传输的信息更大,所以会进行调整,但是tomcat里面的设置是每次通讯都会 new一个上面设置的大小的buffer。这样会增加内存的使用量,所以大小一定要和客户端的同学沟通,不要设置过大。将这个问题改完后比较明显,不会频繁gc。但是在查看jstat时候仍然发现新生代在不断升高。所以不是主要原因

2.tomcat版本

后面我们注释掉了所有逻辑,发现只要启动了websocket,哪怕没有任何连接新生代仍在增长。在最后寻找原因后,终于找到了tomcat版本的问题,由于过去使用的是springmvc,我们使用tomcat9.0.0.M1,所以在springboot上我们升级了springboot默认的版本到tomcat9.0.0.M1。最后我们更改了版本,改回了springboot默认的版本8.5.23。然后....奇迹出现了,cpu正常了....目前还没有查看源码,不过这个坑是找到了,提示各位,springboot推荐的版本还是很稳定的,没有必要的话使用默认版本即可~

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值