日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
記一次現(xiàn)網(wǎng)內(nèi)存泄漏問題排查和分析

大家好,我是雷小帥!大家春節(jié)過得咋樣,反正我是挺崩潰的。本來給自己列了好多計(jì)劃,最終的執(zhí)行效果是這樣的:

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括武清網(wǎng)站建設(shè)、武清網(wǎng)站制作、武清網(wǎng)頁制作以及武清網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,武清網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到武清省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

  • 寫幾篇技術(shù)文章
  • 看幾本技術(shù)書籍

爽快玩了幾天,走親戚,看電影

哈哈,既然過年沒好好學(xué)習(xí),那只有熬夜趕作業(yè)了。

今天這篇文章帶大家分析一個(gè)內(nèi)存異常的問題,也算是新年的第一篇技術(shù)文章了,開工大吉~~~

我們有個(gè)新服務(wù)上線運(yùn)行一段時(shí)間后,老是出現(xiàn)堆內(nèi)存不足,大量出現(xiàn) Full GC,有些實(shí)例甚至出現(xiàn)內(nèi)存溢出錯(cuò)誤:

java.lang.OutOfMemoryError: Java heap space

但是為什么會(huì)內(nèi)存溢出呢?按說訪問量也不是很高,于是進(jìn)行了下面的排查和分析。

1、懷疑內(nèi)存泄漏

進(jìn)入 APM 監(jiān)控系統(tǒng)查看實(shí)例內(nèi)存情況,把時(shí)間線拉長(zhǎng)到一天,可以看到內(nèi)存有緩慢上升趨勢(shì),初步懷疑有內(nèi)存泄漏。

2、Heap Dump

獲取到機(jī)器ip,聯(lián)系運(yùn)維人員去機(jī)器上把堆dump下來,dump命令:

/xxx/jdk1.8.0_212/bin/jmap -dump:live,format=b,file=/xxx/xxx.hprof  進(jìn)程號(hào)

將堆dump文件 Xxx.hprof 下載到本地。

3、下載Heap Dump分析工具

常用的分析工具有MAT和JProfile,本文以MAT工具為示例進(jìn)行分析。工具下載鏈接如下:

??https://www.eclipse.org/mat/downloads.php??

注意:如果你本地安裝的是JDK11+,下載最新的即可;如果你本地安裝的是JDK8,建議下載1.9.2版本。

4、將Dump文件導(dǎo)入MAT工具

MAT是eclipse的一個(gè)插件,免安裝,雙擊打開即可使用。

打開下載好的dump文件

5、分析Dump文件

打開內(nèi)存泄漏懷疑分析報(bào)告,可以看到 SessionFactoryImpl 這個(gè)對(duì)象使用了 149M內(nèi)存,占總內(nèi)存的25%,這肯定不正常。

SessionFactoryImpl 這個(gè)類是跟數(shù)據(jù)庫相關(guān),服務(wù)代碼中使用了JPA作為持久層框架,應(yīng)該是跟JPA相關(guān),繼續(xù)往下分析。

我們打開內(nèi)存樹,往下挖,可以看到 QueryPlanCache 這個(gè)對(duì)象占用內(nèi)存比較大。

QueryPlanCache 表面的意思是:查詢計(jì)劃緩存。用google查一下具體含義。

簡(jiǎn)單來說Hibernate會(huì)緩存sql語句以減少重復(fù)編譯,便于直接命中提高效率。

在使用 SQL in 的時(shí)候,如果 in 后的參數(shù)不同,hibernate會(huì)把其當(dāng)成不同的sql進(jìn)行緩存,從而緩存大量的sql。

緩存的大小是多少?查了一下官方文檔,如果不配置,這個(gè)緩存默認(rèn)最大值為2048 。

Stack Overflow上也有用戶反饋這個(gè)問題:

https://stackoverflow.com/questions/31557076/spring-hibernate-query-plan-cache-memory-usage

7、分析結(jié)論

drawio服務(wù)里面有大量的 sql in 語句,in 后面的參數(shù)不一樣造成Hibernate緩存了大量SQL語句,占用大量的堆內(nèi)存。

8、解決措施

(1)添加配置參數(shù),限制緩存大小

參數(shù)解釋:

https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#configurations-query

(2)提高 sql in 的緩存效率

參數(shù)解釋:

https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#configurations-query


當(dāng)前文章:記一次現(xiàn)網(wǎng)內(nèi)存泄漏問題排查和分析
地址分享:http://www.5511xx.com/article/dpsgjcd.html