Tomcat

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Tomcat > tomcat websocket内存溢出

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

作者:愤怒的苹果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的包。

这里写图片描述

这里写图片描述

这里写图片描述

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

这里写图片描述

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

这里写图片描述

这里写图片描述

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

这里写图片描述

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

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

您可能感兴趣的文章:
阅读全文