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