1. 程式人生 > >java.lang.OutOfMemoryError記憶體洩露 程式碼定位及優化

java.lang.OutOfMemoryError記憶體洩露 程式碼定位及優化

問題現象:
20併發登入系統戶,剛開始所有指標正常,壓測10分鐘左右後,頁面報java.lang.OutOfMemoryError,系統無法登陸,指令碼無法正常壓測,出現記憶體洩露,如圖:


 

監控分析:
檢視到應用伺服器CPU一致持續97%以上,
監控JVM,堆記憶體每次回收不徹底,無法正常釋放,持續加壓下heap記憶體消耗完,最終導致服務宕掉,無法訪問系統頁面。可確定,程式碼存在記憶體洩露
如圖紅色箭頭為處為20併發壓測系統的現象:


  

優化解決:
①、先手動配置引數,調整heap區大小:
JAVA_OPTS="-server
 -Xms2048m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=512m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit"




②、dump出20併發下導致系統記憶體洩露資訊,利用EclipseMAT對執行緒程式碼進行分析,如圖紅圈處導致記憶體洩露程式碼相關資訊:


 



需要開發優化此處程式碼(開發優化為:登陸模組移除快取設定,改用系統啟動載入一次 ),
優化的程式碼如下:
EHCacheUtil.initCacheManager();  
        EHCacheUtil.initCache("pubthlpcache"); 
        Pubthlp pubthlp=new Pubthlp();
        List<Pubthlp> pubthlpList = pubthlpService.getPubthlpListByObj(pubthlp);



        EHCacheUtil.put("cacheList", pubthlpList);

這個快取 每次new 都很消耗java JVM記憶體,壓力測試每次都new  記憶體有限的情況下直接記憶體洩露
優化該程式碼:去掉快取每次new

優化程式碼後:
重新執行20併發壓測,記憶體洩露問題解決,伺服器CPU利用正常,監控JVM heap消耗及垃圾回收正常,系統登入操作正常,如圖:


GC頻率快,還需分析調整JVM引數

相關推薦

java.lang.OutOfMemoryError記憶體洩露 程式碼定位優化

問題現象:20併發登入系統戶,剛開始所有指標正常,壓測10分鐘左右後,頁面報java.lang.OutOfMemoryError,系統無法登陸,指令碼無法正常壓測,出現記憶體洩露,如圖:  監控分析

java.lang.OutOfMemoryError: PermGen space的問題修改JVM的記憶體大小方法

今天做專案時突然遇到這樣的問題,在網上搜到這樣解決方法,轉載供大家參考 PermGen space的全稱是Permanent Generation space,是指記憶體的永久儲存區域OutOfMemoryError: PermGen space從表面上看就是記憶體益出,解

java.lang.OutOfMemoryError解決方案

找到 method bug 自己的 bootstrap set muc initial uri 主要有3種比較常見的OutOfMemory Error: java.lang.OutOfMemoryError: Java heap space java.lang.OutOf

Java 記憶體溢位(java.lang.OutOfMemoryError: Java heap space)分析與解決

說明:下面出現的問題為本人在myeclips開發過程中,開發工具時獲取海量資料時出現的問題報錯。由於本人開發電腦使用的4g記憶體,虛擬記憶體與myeclips相關記憶體設定無法滿足要求。 問題分析:(網上資料整合與翻譯) java.lang.OutOfMemo

Java記憶體洩露定位

1、為什麼會發生記憶體洩漏 Java如何檢測內在洩漏呢?我們需要一些工具進行檢測,並發現記憶體洩漏問題,不然很容易發生down機問題。 編寫java程式最為方便的地方就是我們不需要管理記憶體的分配和釋放,一切由jvm來進行處理,當java物件不再被應用時,等到堆記憶體不夠用時,jvm會進行垃

Maven編譯出現 java lang OutOfMemoryError Java heap space 問題解決辦

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

tomcat記憶體溢位問題:java.lang.OutOfMemoryError: PermGen space

1、java啟動時提示: java.lang.OutOfMemoryError: PermGen space 錯誤,百度了一下解決方式, 如果tomcat是以bat方式啟動的,則如下設定: 修改tomcat_home/bin/catalin a.sh 在“echo “

java.lang.OutOfMemoryError: PermGen space 記憶體溢位

最近由於專案需要,重新配置了tomcat,但是可能是專案內容多,記憶體空間佔用量大,出現了記憶體溢位的情況。在網上查找了很多資源,並一一嘗試,問題都沒有解決。 後來詢問公司同事,講述的同網上資源一樣,修改步驟如下: 1、首先擴大tomcat伺服器的記憶體 進入到tomcat安裝目錄

解決Tomcat記憶體溢位問題(java.lang.OutOfMemoryError: PermGen space)

常見原因: jvm記憶體過小 程式不夠嚴謹,產生了過多的辣雞 解決方案: 增加jvm記憶體 步驟: step1:在Servers視窗雙擊使用的tomcat step2:在彈出的視窗中選擇Open launch configurat

java專案執行中出現記憶體洩漏問題,報java.lang.OutOfMemoryError: PermGen space

一開始我以為是記憶體不足導致的,但是檢視伺服器記憶體還有很多。所以不是記憶體問題。 然後查到java執行時涉及到資源分配的幾個重要引數: Xss:每個執行緒的stack大小(棧) Xmx:JAVA HEAP的最大值、預設為實體記憶體的1/4 Xms:JAVA HE

weblogic 記憶體溢位解決 java.lang.OutOfMemoryError: PermGen space

解決辦法: 1、在idea中,執行時給weblogic server中 VM options 配置增加記憶體的引數:-server -XX:PermSize=1024m -XX:MaxPermSize=1024m   如下圖:     2、調整PermSize 的大小為如下後,再次開啟正

JavaWeb專案本地執行時報了Tomcat記憶體溢位java.lang.OutOfMemoryError

這個錯誤是Tomcat的JVM記憶體不夠了,JVM Heap(堆)溢位 JVM再啟動的時候回自動設定JVM Heap的值,其初始化空間(即-Xms)是實體記憶體的1/64,最大空間(-Xmx)不可超過實體記憶體。可以利用JVM提供的-Xmn -Xms -Xmx等選項進行設定

出現 java.lang.OutOfMemoryError: PermGen space 錯誤的原因解決方法

出現 java.lang.OutOfMemoryError: PermGen space 錯誤的原因及解決方法 2017年04月07日 15:55:41 維C果糖 閱讀數:7852 標籤: tomcat exception out memory 更多 個人分類: 異常及錯誤 版權宣告

linux系統和windows系統關於記憶體溢位的錯誤總結:java.lang.OutOfMemoryError: PermGen space

看了這篇文章,這個問題不用再去任何部落格百度了,也不需要再去搜索這個問題的具體任何情況了,因為這是全網唯一的總結篇! 一、解決方法: 1、windows系統下(tomcat/bin/catalina.bat):         手動設定MaxP

java.lang.OutOfMemoryError: Java heap space錯誤處理辦法

以下是從網上找到的關於堆空間溢位的錯誤解決辦法:java.lang.OutOfMemoryError: Java heap space =================================================== 使用Java程式從資料庫中查詢大量的資料時出現異常:java.lan

java.lang.OutOfMemoryError: Java heap space記憶體不足問題

問題描述 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 解決方案[轉] 一直都知道可以設定jvm heap大小,一直用eclipse寫/除錯java程式。一直用命令列or console加引數跑程式。現象:在ec

java.lang.OutOfMemoryError: Java heap space 記憶體溢位問題排查

最近一直排查系統中的記憶體溢位問題。 不管是用jmap指令還是用比較直觀的jvisualvm工具。都可以看到堆記憶體中各個物件的數量以及佔用的記憶體大小。 一般只要找到有大量的自定義物件一直無法釋放,那麼距離定位到問題就不遠了。 來看一個例子吧: 就像圖裡看到的這

java.lang.OutOfMemoryError: Java heap space錯誤處理辦法(收集整理、轉)

以下是從網上找到的關於堆空間溢位的錯誤解決辦法:java.lang.OutOfMemoryError: Java heap space =================================================== 使用Java程式從資料庫中查詢大量的

Tomcat記憶體溢位java.lang.OutOfMemoryError的解決辦法

Tomcat啟動時報如下錯誤:     java.lang.OutOfMemoryError: PermGen space本人tomcat下放了10個不大的專案,最後就因為多一個專案報記憶體溢位的錯誤,按網上的配置在D:\Program Files\apache-tomca

有關tomcat記憶體不足報錯為:java.lang.OutOfMemoryError: PermGen space問題;

分析原因:記憶體不足的原因主要是因為logs太多引起的,或者是因為tamcat本身設定的記憶體過小.解決辦法:重啟下tomcat,如果還是出現那麼找到tamcat的配置檔案啊,配置下一下資料就可以了-Dcatalina.home=E:\tomcat6-Dcatalina.ba