tomcat?websocket?WsFrameServer內(nèi)存溢出的問題解決
WebSocket連接上了300以后JVM就報內(nèi)存溢出了,把JVM溢出的堆棧日志導(dǎo)了出來這是詳情:
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)存比較大。那么來看下源碼,一般項(xiàng)目不會導(dǎo)入tomcat的jar,所以如果在項(xiàng)目里找不到WsFrameServer就先導(dǎo)入tomcat的包。
WsFrameServer繼承WsFrameBase ,messageBufferText和messageBufferBinary屬性就在WsFrameBase里,然后我們來debug程序,看看是怎么設(shè)置的值。
WsFrameServer里面會調(diào)用WsSession的構(gòu)造方法有給messageBufferText和messageBufferBinary賦默認(rèn)值2個都是8192大概是8K,然后再通過WsSession里面的get屬性方法拿到這2個值。
然后走到了WsWebSocketContainer , setDefaultMaxTextMessageBufferSize方法設(shè)置值,這里的值是819200大概是800K
然后再走看是哪里調(diào)用的這個方法:
設(shè)置messageBufferText和messageBufferBinary的地方就是ServletServerContainerFactoryBean,最后發(fā)現(xiàn)在spring的配置文件中配置了這2個值:
把這個后面2個屬性的值減少2個0,連接數(shù)明顯增大了,也沒報內(nèi)存溢出了。
到此這篇關(guān)于tomcat websocket WsFrameServer內(nèi)存溢出的問題解決的文章就介紹到這了,更多相關(guān)tomcat websocket內(nèi)存溢出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)表單數(shù)據(jù)驗(yàn)證的實(shí)例代碼
這篇文章主要介紹了vue實(shí)現(xiàn)表單數(shù)據(jù)驗(yàn)證的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06啟動tomcat時 錯誤: 代理拋出異常 : java.rmi.server.ExportException: Port
這篇文章主要介紹了啟動tomcat時 錯誤: 代理拋出異常 : java.rmi.server.ExportException: Port already in use: 1099的解決辦法的相關(guān)資料,需要的朋友可以參考下2016-05-05Linux下重啟多個 tomcat 服務(wù)的腳本(推薦)
由于修改tomcat的配置文件或手動操作數(shù)據(jù)庫數(shù)據(jù)后,tomcat的緩存和redis的緩存很嚴(yán)重,需要經(jīng)常重啟tomcat來釋放緩存,經(jīng)常就是手動重啟。下面給大家分享Linux下重啟多個 tomcat 服務(wù)的腳本,一起看看吧2017-06-06Tomcatc3p0配置jnid數(shù)據(jù)源2種實(shí)現(xiàn)方法解析
這篇文章主要介紹了Tomcatc3p0配置jnid數(shù)據(jù)源2種實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10tomcat啟動報錯:java.util.zip.ZipException的解決方法
這篇文章主要給大家介紹了關(guān)于tomcat啟動報:java.util.zip.ZipException錯誤的解決方法,文中通過示例代碼介紹的非常詳細(xì),同樣遇到這個問題的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08解析Tomcat架構(gòu)原理到架構(gòu)設(shè)計(jì)
一般學(xué)習(xí)的時候也是先總覽一下整體,然后逐個部分個個擊破,最后形成思路,了解具體細(xì)節(jié),Tomcat的結(jié)構(gòu)很復(fù)雜,但是Tomcat非常的模塊化,找到了Tomcat最核心的模塊,問題才可以游刃而解,了解了Tomcat的整體架構(gòu)對以后深入了解Tomcat來說至關(guān)重要2021-06-06