WebSocket连接上了300以后JVM就报内存溢出了,把JVM溢出的堆栈日志导了出来这是详情: 1 2 3 4 5 6 648 instances of org.apache.tomcat.websocket.server.WsFrameServer, loaded by java.net.URLClassLoader @ 0x80f923a8 occupy 1,598
WebSocket连接上了300以后JVM就报内存溢出了,把JVM溢出的堆栈日志导了出来这是详情:
可以看到WsFrameServer里面有2个变量messageBufferText和messageBufferBinary占用内存比较大。那么来看下源码,一般项目不会导入tomcat的jar,所以如果在项目里找不到WsFrameServer就先导入tomcat的包。
然后走到了WsWebSocketContainer , setDefaultMaxTextMessageBufferSize方法设置值,这里的值是819200大概是800K 然后再走看是哪里调用的这个方法: 设置messageBufferText和messageBufferBinary的地方就是ServletServerContainerFactoryBean,最后发现在spring的配置文件中配置了这2个值: 把这个后面2个属性的值减少2个0,连接数明显增大了,也没报内存溢出了。 |
2023-03-12
2024-09-24
2024-09-02
2022-08-20
2022-08-10