OutOfMemoryError:Java堆空间–分析和解决方法
生活随笔
收集整理的這篇文章主要介紹了
OutOfMemoryError:Java堆空间–分析和解决方法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
java.lang.OutOfMemoryError:Java堆問題是在支持或開發(fā)復(fù)雜的Java EE應(yīng)用程序時可能會遇到的最復(fù)雜的問題之一。 這篇簡短的文章將為您提供此JVM HotSpot OutOfMemoryError錯誤消息的描述,以及在解決該問題之前應(yīng)如何解決此問題。 有關(guān)如何確定要處理的OutOfMemoryError類型的快速幫助指南,請查閱此Blog中的相關(guān)文章。 您還將找到有關(guān)如何分析JVM堆轉(zhuǎn)儲和識別潛在內(nèi)存泄漏的教程。 java.lang.OutOfMemoryError:Java堆空間–這是什么? 此錯誤消息通常是在JVM OutOfMemoryError條件后您將看到的中間件服務(wù)器日志(Weblogic,WAS,JBoss等)的內(nèi)容: ·它是從實際的Java HotSpot VM本機(jī)代碼生成的 ·由于Java Heap(年輕一代/舊一代空間)內(nèi)存分配失敗( 由于Java Heap耗盡 ) 而觸發(fā) 在OpenJDK項目源代碼的下面找到暴露JVM HotSpot實現(xiàn)的代碼片段。 該代碼顯示了哪個條件觸發(fā)了OutOfMemoryError:Java堆空間條件。 #collectedHeap.inline.hpp 我強(qiáng)烈建議您自己從OpenJDK下載HotSpot VM源代碼,以自己的利益和將來的參考。 http://openjdk.java.net/groups/hotspot/ 好的,我的應(yīng)用程序Java Heap已經(jīng)用盡了……我如何監(jiān)視和跟蹤我的應(yīng)用程序Java Heap? 正確監(jiān)視和跟蹤Java堆空間(年輕一代和老一代空間)的內(nèi)存占用量的最簡單方法是從HotSpot VM中啟用詳細(xì)GC。 請簡單地在JVM啟動參數(shù)中添加以下參數(shù): -verbose:gc –XX:+ PrintGCDetails –XX:+ PrintGCTimeStamps –Xloggc:<應(yīng)用程序路徑> /gc.log 然后,您可以按照下面的教程進(jìn)行操作,以了解如何閱讀和分析HotSpot Java Heap占用空間。 http://javaeesupportpatterns.blogspot.com/2011/10/verbosegc-output-tutorial-java-7.html 好的,謝謝,現(xiàn)在我可以看到我有一個很大的Java Heap內(nèi)存問題…但是如何解決呢? 有多種情況可能導(dǎo)致Java堆耗盡,例如: ·Java堆空間相對于您的應(yīng)用程序流量和占用空間太小 ·Java堆內(nèi)存泄漏( OldGen空間隨著時間的推移而緩慢增長…… ) ·突發(fā)線程和/或流氓線程在短時間內(nèi)等占用大量內(nèi)存。 在下面找到您可以遵循的高級步驟列表,以進(jìn)行進(jìn)一步的故障排除: ·如果尚未完成,請啟用詳細(xì)GC >> -verbose:gc ·分析詳細(xì)的GC輸出并確定每個Java Heap空間(YoungGen和OldGen)的Java Heap的內(nèi)存占用量 ·分析詳細(xì)的GC輸出或使用JConsole之類的工具來確定您的Java Heap是否隨時間泄漏。 這可以通過監(jiān)視HotSpot舊發(fā)電機(jī)空間來觀察。 ·監(jiān)視您的中間件線程并定期生成JVM線程轉(zhuǎn)儲,尤其是當(dāng)觀察到Java Heap利用率突然增加時。 線程轉(zhuǎn)儲分析將使您能夠查明潛在的長時間運(yùn)行的線程,這些線程可以在很短的時間內(nèi)在Java堆上分配大量對象。 如果有的話 ·在JVM啟動參數(shù)中添加以下參數(shù):-XX:HeapDumpOnOutOfMemoryError這將使HotSpot VM生成二進(jìn)制的堆轉(zhuǎn)儲(HPROF)格式。 二進(jìn)制堆轉(zhuǎn)儲是關(guān)鍵數(shù)據(jù),可用來分析應(yīng)用程序的內(nèi)存占用和/或Java堆內(nèi)存泄漏的源 從分辨率的角度來看,我建議您使用生成的堆轉(zhuǎn)儲分析Java堆內(nèi)存占用量。 可以使用免費(fèi)的內(nèi)存分析器工具(MAT)分析二進(jìn)制堆轉(zhuǎn)儲(HPROF格式)。 這將使您了解您的Java應(yīng)用程序占用空間和/或查明可能的內(nèi)存泄漏的來源。 一旦清楚了解了這種情況,就可以通過增加Java堆容量(通過–Xms和Xmx參數(shù))或減少應(yīng)用程序內(nèi)存占用和/或消除應(yīng)用程序代碼中的內(nèi)存泄漏來解決問題。 請注意,在中間件服務(wù)器代碼和JDK中也經(jīng)常發(fā)現(xiàn)內(nèi)存泄漏。 我已盡一切努力,但我仍在努力查明OutOfMemoryError的來源 不用擔(dān)心,只需在本文末尾發(fā)表評論/問題或直接通過電子郵件發(fā)送給我@ phcharbonneau @ hotmail.com 。 我目前提供免費(fèi)的IT / Java EE咨詢。 請在提供您生成的數(shù)據(jù)(例如指向堆轉(zhuǎn)儲的下載鏈接,線程轉(zhuǎn)儲數(shù)據(jù),服務(wù)器日志等)的同時為您提供問題描述,我們將為您分析問題。 參考: OutOfMemoryError:Java堆空間– Java EE支持模式和Java教程博客中的JCG合作伙伴 Pierre-Hugues Charbonneau 分析和解決方法 。
翻譯自: https://www.javacodegeeks.com/2012/05/outofmemoryerror-java-heap-space.html
總結(jié)
以上是生活随笔為你收集整理的OutOfMemoryError:Java堆空间–分析和解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux应用开发工程师需要学什么(li
- 下一篇: 一类备案凭证有效期多久(一类备案)