1. 程式人生 > >記一次解決OutOfMemoryError: Java heap space詳細過程與解決思路(jvisualvm解決問題案例詳細分析)

記一次解決OutOfMemoryError: Java heap space詳細過程與解決思路(jvisualvm解決問題案例詳細分析)

喧譁的夜滿地銀光。望向窗外, 星的眨眼頻率格外的高,低眼看泛著油光的鍵盤,心中的寂寞。。。

滴滴,靠著每天【ctrl+alt+w】幾千+的慣性,開啟最【嘿嘿嘿】的聊天軟體,心中不免惆悵,已過午時三刻,還tm不下班。

惆 惆啥?油光的臉瞬間露出一縷微笑,惺忪的眼也充滿了血絲,活來啦!!!我看見bug在向我招手,大爺來玩呀,來吧來吧。。。刻不容緩。

這裡寫圖片描述

那麼:問題來了, 一點自己寫的程式碼的資訊沒有,怎麼找?相信這是大多數兄弟遇到記憶體問題的第一反應

錯誤資訊是我朋友發給我的截圖,我並沒有他的程式碼,也不清楚專案的業務,更不知道為什麼會OutOfMemory,懵逼中

開始搞事情

首先:理清思路

1. 發現問題

2. 分析問題

3. 解決問題

首先梳理一下思路:

  • OutOfMemory,記憶體溢位, 是的,溢位了,什麼問題導致的呢,是不是程式的記憶體給的不夠引起的呢。

    隨即,我問了我的朋友程式啟動指定記憶體沒有?如果沒有的話制定以下記憶體會不會解決問題呢

    -Xms512m -Xmx2048m

    回覆:啟動成功後,朋友測試了一下還真的好了( •̀ ω •́ )y,真開心

  • 你以為到這就結束了嗎?那未免也太積薄水了吧

    (●’◡’●): 不行呀,兄弟, 我訪問沒問題了,給我們老闆訪問就不行了,還是java.lang.OutOfMemoryError: Java heap space,是不是我們老闆有毒呀,我是不是考慮要換一個公司呀。

    /(ㄒoㄒ)/: 兄弟,我認真的思考了一下。不瞞你說,我感覺你們老闆沒有那麼簡單,最起碼也得會個氣功什麼的,你以後要小心呀!!!(重要的事情三個感嘆號)
    (●’◡’●):葵花寶典我已經看完前言了,我離成功就差那麼零點零一毫米了,但是現在tmd記憶體溢位了我腫麼辦!
    /(ㄒoㄒ)/:兄弟莫著急,你用OutOfMemoryError神器jvisualvm看一下記憶體情況
    (●’◡’●):那是什麼玩意,玉女心經裡的麼?md我還沒看到那呢
    。。。。。。。。。。。。。。。。。。。
    一番神講解下終於開啟jvisualvm查看了記憶體情況。。。
    該工具位於jdk安裝目錄下bin目錄下,是jdk自帶分析工具,功能非常強大
    開啟該nb工具後的樣子是這樣的
    這裡寫圖片描述


    沒聽過的的兄弟請點此處查閱後繼續檢視本文章

1. 發現問題

兄弟一看,情況不對呀,儘管分配了記憶體,但是記憶體還是會溢位
經過一下系列分析(分析詳細過程):

okokok 接下來,就是見證奇蹟的時刻,lets go
1. 這位兄弟告訴我,啟動程式沒問題,一訪問就出問題,ok,(重點,要劃線)
既然啟動沒問題,那你把啟動的時候的記憶體分佈情況與第一次訪問的時候的記憶體情況發給我。
如下圖片是第一次啟動程式的情況

這裡寫圖片描述
其實很多資訊都很明瞭了,啟動程式的分配的堆記憶體大小、程式所佔用的堆記憶體大小,暫時看起來是沒什麼毛病,記憶體的大小並沒有什麼異常的情況,而且此時並沒有發聲記憶體溢位的異常。

但是,沒有問題怎麼會出異常呢,表開心的太找,下面這張圖片是沒有為程式啟動的時候分配記憶體,並且發起了一次請求後的記憶體情況。
這裡寫圖片描述

最大記憶體瞬間暴漲好幾倍,而且程式同時丟擲如下異常
這裡寫圖片描述

嗯,問題出來了

要解決的就是你,此時,問題bug已經重現,問題發現,第一關完美通關!!!

2. 分析問題

好的女王大人

前面說了這麼多(扯。蛋。),但是,問題就是這麼個問題,記憶體溢位,ok下面就是真正的展現技術的時刻了,你們給我坐正咯

記憶體出現溢位後,我讓這位朋友分配了一下啟動的最大記憶體與最小記憶體
這裡寫圖片描述

既然問題已經出來了,那就用jvisualvm分析一下記憶體把,第一次請求出現的問題是記憶體暴漲,既然是記憶體問題,那麼我們就對症下藥,分析記憶體。
這裡寫圖片描述

點選上圖堆dump按鈕進行堆記憶體分析,點選後如下所示
這裡寫圖片描述

這裡寫圖片描述

點選類後檢視物件的記憶體佔比情況如下,點選大小按鈕進行記憶體佔比大小排序

這裡寫圖片描述

找到這個可恨的特務了,就是你,害的我兄弟被領導大問號臉,哼

3. 解決問題

繼續跟蹤這個物件,看丫的到底是個什麼東西,有必要搞他一搞。

右擊該物件,點選在例項檢視中顯示按鈕,跳轉如下頁面

這裡寫圖片描述

這裡寫圖片描述

跟蹤物件發現,名字竟然是一個叫做headerbuffer的東西,看名字,可能是一個request請求的header的緩衝區,佔了400多m,一個request的請求頭,你佔了400多m,臉呢?

問題找到了,一個request的請求頭佔了四百兆,後續根據這個結果發現,為這個程式分配了兩個g的最大記憶體之後,每次請求都會生成400m的該byte陣列,接下來就定位到了請求的身上。

問題找到了,接下來就該看程式碼了,程式碼是這位兄弟寫的,我就不方便隨便貼人家的程式碼了,我先讓這位兄弟檢查一下程式碼,這個介面上做沒做什麼特殊處理,攔截器、過濾器、所有跟request請求相關的配置,都檢查一遍,最後在springboot的配置檔案中發現瞭如下配置:

這裡寫圖片描述

這簡直就是自己挖坑給自己跳呀,具體配置說明兄弟就不再解釋了

滿腦子黑人問號不再多bb了,咱們在這不多討論該兄弟為什麼這麼寫

jvisualvm、 jprofile真的是一個記憶體優化、排查問題的一個好工具,java們早晚會用到它,jprofile教程網上並不少,但是講的好的並沒有幾個。重要的還是要自己去熟悉,去理解。

該篇文章僅作為記憶體溢位的一個解決思路

另提醒各位程式朋友們,可能做不到每一行程式碼都能刨根問底知道底層是怎麼實現、什麼原理,但是儘量知道你寫或copy的每一行程式碼什麼意思,影響有多大。

相關推薦

解決OutOfMemoryError: Java heap space詳細過程解決思路jvisualvm解決問題案例詳細分析

喧譁的夜滿地銀光。望向窗外, 星的眨眼頻率格外的高,低眼看泛著油光的鍵盤,心中的寂寞。。。 滴滴,靠著每天【ctrl+alt+w】幾千+的慣性,開啟最【嘿嘿嘿】的聊天軟體,心中不免惆悵,已過午時三刻,還tm不下班。 惆 惆啥?油光的臉瞬間露出一

hive的記憶體溢位(OutOfMemoryError: Java heap space)排查

轉載請註明出處:http://blog.csdn.net/gklifg/article/details/50418109 剛剛從java組轉崗找資料組,學習大資料的知識,開發語言也從java轉到python新奇之外也遇到了諸多問題,其中最令我頭疼的就是在hive上的統計任務

mybaits快取導致的記憶體溢位 java.lang.OutOfMemoryError: Java heap space

先貼一下錯誤截圖 org.springframework.web.util.NestedServletException: Ha

解決sqoop報錯:java.lang.OutOfMemoryError: Java heap space

keep image ces use ati size tex 問題 -- 報錯棧: 2017-06-15 16:24:50,449 INFO [main] org.apache.sqoop.mapreduce.db.DBRecordReader: Executing

jmeter出現java.lang.OutOfMemoryError: Java heap space解決辦法

space jmeter blank 容易 設備 lan xmx 腳本 解決 大並發或者循環次數過多的時候,jmeter容易出現 java.lang.OutOfMemoryError: Java heap space這樣的異常,其中修改jmeter.bat 或者jmeter

正確使用MySQL JDBC setFetchSize()方法解決JDBC處理大結果集 java.lang.OutOfMemoryError: Java heap space

() lai 設置 從服務器 rest direction tools start 記錄 昨天在項目中需要對日誌的查詢結果進行導出功能。 日誌導出功能的實現是這樣的,輸入查詢條件,然後對查詢結果進行導出。由於日誌數據量比較大。多的時候,有上億條記錄。 之前的

解決eclipse maven install 造成JVM 內存溢出(java.lang.OutOfMemoryError: Java heap space)

add eap tor pac task 報錯信息 efi trace alt maven install 報錯信息: The system is out of resources.Consult the following stack trace for details.

at java.util.Arrays.copyOfRange(Arrays.java:3209)導致的java.lang.OutOfMemoryError: Java heap space 錯誤的解決辦法

home 修改 arr 解決辦法 cal copy server tom space 手動設置Heap size 修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入

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

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

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

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

java虛擬機器常見錯誤 -- java.lang.OutOfMemoryError: Java heap space解決辦法

//首先檢查程式有沒有限入死迴圈 這個問題主要還是由這個問題 java.lang.OutOfMemoryError: Java heap space 引起的。第一次出現這樣的的問題以後,引發了其他的問題。在網上一查可能是JAVA的堆疊設定太小的原因。 跟據網上的答案大致

部署時報java.lang.NoSuchMethodError:javax.persistence.spi.PersistenceUnitInfo.getValidationModeLjavax / persistence / ValidationMode;的解決辦法

樓主在部署war包的時候,本地啟動不報錯,伺服器商報如下問題: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfi

java.lang.OutOfMemoryError: Java heap space解決方法

//首先檢查程式有沒有限入死迴圈 這個問題主要還是由這個問題 Java.lang.OutOfMemoryError: Java heap space 引起的。第一次出現這樣的的問題以後,引發了其他的問題。在網上一查可能是JAVA的堆疊設定太小的原因。 跟據網上的答案大致有這兩種解決方法: 1、設定環境變數

應用jacob元件造成的記憶體溢位解決方案java.lang.OutOfMemoryError: Java heap space

轉自(http://www.myexception.cn/ruby-rails/903889.html) 使用jacob元件造成的記憶體溢位解決方案(java.lang.OutOfMemoryError: Java heap space) 都說記憶體洩漏是C++的通病,記

HDFS問題集,使用命令報錯:com.google.protobuf.ServiceException:java.lang.OutOfMemoryError:java heap space

正常 腳本 spa 執行 xmx error exception 內存 解決方案 僅個人實踐所得,若有不正確的地方,歡迎交流! 一、起因   執行以下兩條基本的HDFS命令時報錯 1 hdfs dfs -get /home/mr/data/* ./ 2 hdfs dfs

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space解決方法

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

Linux運行Java出現“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”報錯

blog inux ict jar mem car dict enc cnblogs 在運行如下程序時出現“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”

排查sqoop報錯:Error running child : java.lang.OutOfMemoryError: Java heap space

date 行數 content sin mapper native reader exti 占用 報錯棧: 2017-06-16 19:50:51,002 INFO [main] org.apache.hadoop.mapred.MapTask: Processing

eclipse運行程序時報java.lang.OutOfMemoryError: Java heap space內存不足問題

new 技術分享 heap could not def jvm baidu 默認 eight System.setProperty("webdriver.firefox.bin", "D:\\Mozilla Firefox\\firefox.exe")

Java_異常_05_ OutOfMemoryError: Java heap space

pts server wid sdn href using ima bubuko 技術 一、異常現象: 二、異常原因 JAVA的堆棧設置太小 註: 出現此異常之後,會引發其他的問題。 三、異常解決 手動設置Heap size: 修改 TOMC