沒有任何神奇的工具能夠爲您修復OutOfMemoryError,可是下面有一些選項能夠幫助您自動排除故障並肯定根本緣由。按照如下三個步驟來處理此JVM內存錯誤並開始恢復:sql
堆轉儲是在指定時間點J內ava程序內存中的內容的快照。它包含有關存儲器中存在的對象的詳細信息,這些對象中存在的實際數據,這些對象如何維護到其餘對象以及其餘信息。堆轉儲是修復OutOfMemoryError的重要步驟,但它們確實存在一些挑戰,由於它們的內容可能難以閱讀和解密。架構
在最佳狀況下,您但願在OutOfMemoryError以前或以前捕獲堆轉儲以診斷緣由,但這並不容易。可是,您能夠自動執行此堆轉儲過程。經過使用如下變量編輯JRE的啓動參數,告訴JVM建立堆轉儲:併發
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/crashes/my-heap-dump.hprof
大多數狀況下,OutOfMemoryError不會使應用程序崩潰,但它可能會使應用程序處於不穩定狀態。在這種狀況下重啓將是一種謹慎的舉動,由於不穩定的應用程序實例提供的請求會致使錯誤的結果。app
您也能夠自動執行此重啓過程。只需編寫一個「restart-myapp.sh」腳本,它會重啓您的應用程序。向JVM提供命令行參數,以便在遇到異常時觸發它以運行如下腳本:分佈式
-XX:OnOutOfMemoryError=/scripts/restart-myapp.sh
傳遞此參數時,只要拋出OutOfMemoryError,JVM就會調用「/scripts/restart-myapp.sh」腳本。所以,您的應用程序將在遇到OutOfMemoryError後當即自動從新啓動。高併發
如今您已經捕獲了堆轉儲 - 這是解決問題所需的 - 並從新啓動應用程序 - 以減小中斷影響 - 下一步是故障排除。工具
如上所述,理解堆轉儲的內容可能很棘手,但有一些有用的堆分析器工具能夠幫助簡化流程。一些選項包括Eclipse Memory Analyzer(MAT),Oracle JHat或HeapHero。性能
這些工具生成內存分析報告,突出顯示致使最大內存的對象,並但願幫助識別致使內存泄漏的對象。學習
當您的應用程序遇到運行時錯誤時,這會很是使人沮喪。您須要耐心,內存堆轉儲以及分析問題的適當工具來修復OutOfMemoryError以及相似相似的其餘使人討厭的異常。spa
最後,歡迎作Java的工程師朋友們加入Java高級架構進階Qqun:963944895
羣內有技術大咖指點難題,還提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)
比你優秀的對手在學習,你的仇人在磨刀,你的閨蜜在減肥,隔壁老王在練腰, 咱們必須不斷學習,不然咱們將被學習者超越!
趁年輕,使勁拼,給將來的本身一個交代!