tomcat websocket WsFrameServer内存溢出的问题解决

 更新时间:2024年12月24日 08:37:32   作者:愤怒的苹果ext  
本文主要介绍了tomcat websocket WsFrameServer内存溢出的问题解决,文中通过图文示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

WebSocket连接上了300以后JVM就报内存溢出了,把JVM溢出的堆栈日志导了出来这是详情:

 648 instances of "org.apache.tomcat.websocket.server.WsFrameServer", loaded by "java.net.URLClassLoader @ 0x80f923a8" occupy 1,598,429,376 (96.40%) bytes. These instances are referenced from one instance of "java.util.concurrent.ConcurrentHashMap$Node[]", loaded by "<system class loader>"

Keywords
java.util.concurrent.ConcurrentHashMap$Node[]
org.apache.tomcat.websocket.server.WsFrameServer
java.net.URLClassLoader @ 0x80f923a8

这里写图片描述

这里写图片描述

这里写图片描述

可以看到WsFrameServer里面有2个变量messageBufferText和messageBufferBinary占用内存比较大。那么来看下源码,一般项目不会导入tomcat的jar,所以如果在项目里找不到WsFrameServer就先导入tomcat的包。

这里写图片描述

  • WsFrameServer继承WsFrameBase ,messageBufferText和messageBufferBinary属性就在WsFrameBase里,然后我们来debug程序,看看是怎么设置的值。

  • WsFrameServer里面会调用WsSession的构造方法有给messageBufferText和messageBufferBinary赋默认值2个都是8192大概是8K,然后再通过WsSession里面的get属性方法拿到这2个值。

这里写图片描述

这里写图片描述

然后走到了WsWebSocketContainer , setDefaultMaxTextMessageBufferSize方法设置值,这里的值是819200大概是800K

这里写图片描述

然后再走看是哪里调用的这个方法:

这里写图片描述

这里写图片描述

设置messageBufferText和messageBufferBinary的地方就是ServletServerContainerFactoryBean,最后发现在spring的配置文件中配置了这2个值:

这里写图片描述

把这个后面2个属性的值减少2个0,连接数明显增大了,也没报内存溢出了。

到此这篇关于tomcat websocket WsFrameServer内存溢出的问题解决的文章就介绍到这了,更多相关tomcat websocket内存溢出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue实现表单数据验证的实例代码

    vue实现表单数据验证的实例代码

    这篇文章主要介绍了vue实现表单数据验证的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法

    启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port

    这篇文章主要介绍了启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法的相关资料,需要的朋友可以参考下
    2016-05-05
  • Linux下重启多个 tomcat 服务的脚本(推荐)

    Linux下重启多个 tomcat 服务的脚本(推荐)

    由于修改tomcat的配置文件或手动操作数据库数据后,tomcat的缓存和redis的缓存很严重,需要经常重启tomcat来释放缓存,经常就是手动重启。下面给大家分享Linux下重启多个 tomcat 服务的脚本,一起看看吧
    2017-06-06
  • Tomcatc3p0配置jnid数据源2种实现方法解析

    Tomcatc3p0配置jnid数据源2种实现方法解析

    这篇文章主要介绍了Tomcatc3p0配置jnid数据源2种实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • tomcat启动报错:java.util.zip.ZipException的解决方法

    tomcat启动报错:java.util.zip.ZipException的解决方法

    这篇文章主要给大家介绍了关于tomcat启动报:java.util.zip.ZipException错误的解决方法,文中通过示例代码介绍的非常详细,同样遇到这个问题的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • Tomcat配置gzip压缩提高浏览网站的速度

    Tomcat配置gzip压缩提高浏览网站的速度

    HTTP 压缩可以大大提高浏览网站的速度,相对于普通的浏览过程HTML ,CSS,Javascript , Text ,它可以节省40%左右的流量
    2014-09-09
  • tomcat同时使用http和https访问的配置方法

    tomcat同时使用http和https访问的配置方法

    这篇文章主要介绍了tomcat同时使用http和https访问的配置方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Tomcat多实例部署及配置原理

    Tomcat多实例部署及配置原理

    这篇文章主要介绍了Tomcat多实例部署及配置过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Tomcat如何配置访问日志和线程数

    Tomcat如何配置访问日志和线程数

    Tomcat是一个功能强大且易于使用的Java Servlet容器,适用于开发和部署各种类型的Java Web应用程序,本文主要介绍了Tomcat如何配置访问日志和线程数,以优化性能并提高系统可靠性
    2023-11-11
  • 解析Tomcat架构原理到架构设计

    解析Tomcat架构原理到架构设计

    一般学习的时候也是先总览一下整体,然后逐个部分个个击破,最后形成思路,了解具体细节,Tomcat的结构很复杂,但是Tomcat非常的模块化,找到了Tomcat最核心的模块,问题才可以游刃而解,了解了Tomcat的整体架构对以后深入了解Tomcat来说至关重要
    2021-06-06

最新评论