tomcat?websocket?WsFrameServer內(nèi)存溢出的問題解決
WebSocket連接上了300以后JVM就報內(nèi)存溢出了,把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占用內(nèi)存比較大。那么來看下源碼,一般項目不會導入tomcat的jar,所以如果在項目里找不到WsFrameServer就先導入tomcat的包。

WsFrameServer繼承WsFrameBase ,messageBufferText和messageBufferBinary屬性就在WsFrameBase里,然后我們來debug程序,看看是怎么設置的值。
WsFrameServer里面會調(diào)用WsSession的構造方法有給messageBufferText和messageBufferBinary賦默認值2個都是8192大概是8K,然后再通過WsSession里面的get屬性方法拿到這2個值。


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

然后再走看是哪里調(diào)用的這個方法:


設置messageBufferText和messageBufferBinary的地方就是ServletServerContainerFactoryBean,最后發(fā)現(xiàn)在spring的配置文件中配置了這2個值:

把這個后面2個屬性的值減少2個0,連接數(shù)明顯增大了,也沒報內(nèi)存溢出了。
到此這篇關于tomcat websocket WsFrameServer內(nèi)存溢出的問題解決的文章就介紹到這了,更多相關tomcat websocket內(nèi)存溢出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
 vue實現(xiàn)表單數(shù)據(jù)驗證的實例代碼
這篇文章主要介紹了vue實現(xiàn)表單數(shù)據(jù)驗證的實例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
 啟動tomcat時 錯誤: 代理拋出異常 : java.rmi.server.ExportException: Port
這篇文章主要介紹了啟動tomcat時 錯誤: 代理拋出異常 : java.rmi.server.ExportException: Port already in use: 1099的解決辦法的相關資料,需要的朋友可以參考下2016-05-05
 Tomcatc3p0配置jnid數(shù)據(jù)源2種實現(xiàn)方法解析
這篇文章主要介紹了Tomcatc3p0配置jnid數(shù)據(jù)源2種實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10
 tomcat啟動報錯:java.util.zip.ZipException的解決方法
這篇文章主要給大家介紹了關于tomcat啟動報:java.util.zip.ZipException錯誤的解決方法,文中通過示例代碼介紹的非常詳細,同樣遇到這個問題的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-08-08

