日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TOMCAT websocket 多连接内存泄漏与jetty对比分析

發布時間:2024/4/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TOMCAT websocket 多连接内存泄漏与jetty对比分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

服務器環境8核 32G內存

?

問題:

在5000個連接的時候Tomcat內存基本吃滿

Tomcat 壓測:

連接數

內存消耗

CPU

1000

6.9G

100%

2000

12G

100%

3000

19G

100%

4000

25G

100%

4468

30G

100%

更多連接已經無法建立

檢查下JVM內存使用情況,其中老年代被占用了98.4%,有大量不能釋放的對象在heap。

老年代內存大小31.5G,老年代使用31G

JETTY壓測

連接數

內存消耗

CPU

1000

1G

25%

3000

1G

25%

5000

1.1G

25%

10000

1.2G

25%

20000

1.4G

50%

內存情況老年代被使用了79.4%,老年代總大小3.5G占用0.5G

通過現象我們可以看到jetty占用內存非常小,而TOMCAT暫用卻非常多,但是國外論壇有人Tomcat卻可以壓到4萬的連接,是什么東西占用了這么多heap空間呢?

分析TOMCAT內存占滿原因:

一,由于測試方便在本地啟動程序建立了501個連接,并且用jmap生成了快照

二,我們用mat來分析下內存的情況(也可以用jhat,但是太low了很多還需要人工肉眼看和計算)

我們可以看到WsFrameServer占用了2.9的heap空間對象個數恰好是我們建立的連接數

三,現在我們來分析WsFrameServer對象,到底什么東西可以占用這么大

我們可以看到WsFrameServer對象直接引用對象的heap空間HeapCharBuffer和HeapByteBuffer非常大

我們再來看看這個大對象什么引用在引用,通過分析我們知道了原來是WsFrameServer的messageBufferText成員變量

下面我們來看下源代碼

我們在WsFrameServer的父類中發現了這兩個大對象的引用

那么問題來了,是什么原因導致這個對象很大的呢?我們繼續看源代碼什么地方用來它,特別是初始化的時候

我們檢查到,這個地方初始化的,初始化大小是wsSession.getMaxBinaryMessageBufferSize()

和wsSession.getMaxTextMessageBufferSize(),那么問題又來了,這兩個值有是從哪里來的呢?

我們查看源碼

有一個默認值是8K,如果是8K的話內存不至于溢出,看什么地方做了賦值

原來是這個地方做的賦值,那么webSocketContainer又是從哪里來的呢?

我們點進去

這里要么是默認值,要么是什么地方做了設置我們打斷點調試,而且這個默認值是8K,肯定是什么地方修改了,那么我們在set方法打斷點

斷點來了,我們通過線程棧來分析下什么地方調到這里來的,跟著往上點

最后我們發現是這個類ServletServerContainerFactoryBean,這個類是spring提供的,我們是在這兒用到了,原來如此,內存之所以這么大就是這里的設置導致的,這個設置的目的是讓websocket可以傳輸更大的消息

其實我們看到的Tomcat的webSocketContainer是實現了javax.websocket.webSocketContainer的,很明顯這個是J2EE的規范我們可以查下這個規范

https://docs.oracle.com/javaee/7/api/javax/websocket/WebSocketContainer.html

其實這個類就是在初始化的時候可以讓你設置websocket相關的一些參數

但是它設置了之后對所有session都生效了所以導致我們的連接數上不去,有什么辦法可以解決嗎,我們查到有另外的J2EE規范可以在運行過程中動態的修改而且是針對特定session的

那么問題來了,為什么jetty沒有出現這個問題,如果是J2EE的規范那么我們設置這個值JETTY也應該出現這個問題,可是沒有!

我們再來對jetty進行調試,發現這個配置對jetty不起作用

為什么不起作用呢?這又是另外的問題了~

后來通過源碼分析得知JETTY和TOMCAT的實現不一樣,不知道算不算BUG,個人認為是JETTY的BUG~

什么代碼實現導致他們不一樣呢?

Tomcat每次請求過來時在創建session時都會把這個webSocketContainer作為參數傳進去所以對所有的session都生效了

我們來看看jetty

啟動初始化時jetty把webSocketContainer的參數值設置給了這個過濾器,我們看看這個過濾器它的dofilter方法

其實在這個過濾器我們沒有注冊任何的訪問URL,因為我們是通過spring提供的方式實現的websocket,如果我們在這個過濾器注冊了訪問URL那么所有過來的請求都會生效~可以繼續跟后面的代碼,其實就是調用的其他處理器來處理,這些處理器是在這里初始化的

每個url都有一個單獨的處理器,這個實現是springboot提供的

spring給每一個websocket URL單獨new 了一個處理器,jetty里面這個類是WebSocketServerFactory

其實jetty的處理方式是事件驅動模式設計,把所有的請求當做一個事件,不同的事件有自己對應的eventdriver來處理

重點是jetty在實例化這個對象的時候并沒有把webSocketContainer所帶的參數設置進去

這就導致了Tomcat生效jetty沒有生效,其實你還會發現雖然jetty的buffer默認大小是64K,Tomcat是8K,可是jetty壓測的時候CPU和內存都比Tomcat少,這是為什么呢?

原因是jetty用了對象池,不像tomcat來一次請求就new一個buffer,下面是jetty使用對象池的地方

后面簡單做了netty的壓測10000個連接消耗內存190M,吊炸天的存在

總結

以上是生活随笔為你收集整理的TOMCAT websocket 多连接内存泄漏与jetty对比分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲免费婷婷 | 国产视频三区 | 四虎av| 级毛片| 黄片毛片在线 | 麻豆影视在线观看 | 美国特色黄a大片 | 久久狠 | 久操欧美 | 欧美自拍第一页 | www.五月激情 | 男人靠女人免费视频网站 | 草1024榴社区成人 | 亚洲精品视频网 | 91视频论坛 | 日韩精品欧美在线 | 精品国产伦一区二区三区 | 波多野吉衣毛片 | 久久久高清免费视频 | 亚洲制服丝袜在线播放 | 精国产人伦一区二区三区 | 波多野结衣三级视频 | 一级大片视频 | 亚洲视频在线观看一区二区 | 久久久久九九九九 | 国产日韩一级片 | 美女喷液视频 | 婷婷色九月 | 国产精品成人免费视频 | 亚洲三级小视频 | 日韩国产欧美视频 | 成人综合站 | 免费又黄又爽又色的视频 | 清纯唯美亚洲色图 | 日本一区高清 | 99精品乱码国产在线观看 | 日韩av在线第一页 | 天天看夜夜| 国产在线综合网 | 天天色播 | 亚洲a网| 中文字幕1 | 国产精品国语自产拍在线观看 | 成人午夜在线观看 | 日韩av视屏 | av中亚| 欧美日韩一区二区三区不卡 | 日韩成人免费在线 | 91影院在线观看 | 国产精品亚洲二区在线观看 | 深夜福利视频在线 | 亚洲精品美女久久久 | 国产黄色一区 | 午夜少妇久久久久久久久 | 亚洲熟妇一区二区 | 久精品免费视频 | 国产精品亚洲αv天堂无码 伊人性视频 | 经典av在线 | 成人三级晚上看 | 久久国产精品毛片 | 四川丰满少妇被弄到高潮 | 久久毛片网站 | 女人床技48动态图 | 在线观看免费国产视频 | 免费黄色片视频 | 秋霞成人午夜鲁丝一区二区三区 | 男人靠女人免费视频网站 | 麻豆视频在线看 | 阿v天堂网 | 女女同性女同一区二区三区按摩 | 亚洲午夜久久久久久久久红桃 | 男人天堂亚洲 | 精品国产一区二区三区久久 | 在线免费观看你懂的 | 在线视频一区二区 | 亚洲无码精品国产 | 欧美韩国日本 | 国产精品11 | 日本免费小视频 | 亚洲在线免费视频 | 久久亚洲网站 | 日韩色综合| 中文字幕av久久爽 | 欧美黄色三级视频 | 东北少妇不戴套对白第一次 | 国产不卡高清 | 天天操夜夜夜 | 国产午夜片 | 免费黄色在线观看 | 成人av番号网 | 草草草av| 日韩夜色| 福利在线免费视频 | 成人av影视在线 | 久久99影院 | 上海女子图鉴 | 天天舔天天干 | 91精品国产综合久久香蕉 | 中文字幕欧美一区 |