日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

与OutOfMemoryError相关的JVM参数

發布時間:2023/12/3 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 与OutOfMemoryError相关的JVM参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JVM提供了有用的參數來處理OutOfMemoryError 。 在本文中,我們要強調那些JVM參數。 在對OutOfMemoryError進行故障排除時,它可能對您很方便。 這些JVM參數是:

  • -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath
  • -XX:OnOutOfMemoryError
  • -XX:+ ExitOnOutOfMemoryError
  • -XX:+ CrashOnOutOfMemoryError
  • 讓我們在本文中詳細討論這些JVM參數。

    XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath

    堆轉儲基本上是內存的快照。 它包含有關內存中存在的對象,這些對象中存在的實際數據,這些對象的引用的詳細信息。 堆轉儲是解決內存問題的重要工具。

    為了診斷OutOfMemoryError或任何與內存相關的問題,必須在應用程序開始遇到OutOfMemoryError之前或此刻捕獲堆轉儲。 很難在適當的時候手動捕獲堆轉儲,因為我們不知道何時會拋出OutOfMemoryError。 但是,在命令行中啟動應用程序時,可以通過傳遞以下JVM參數來自動執行捕獲堆轉儲的操作:

    -XX:+HeapDumpOnOutOfMemoryError and -XX:HeapDumpPath={HEAP-DUMP-FILE-PATH}

    例:

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/crashes/my-heap-dump.hprof

    在“ -XX:HeapDumpPath”中,您需要指定堆轉儲存儲的文件路徑。

    傳遞這兩個JVM參數時,將在拋出OutOfMemoryError時自動捕獲堆轉儲并將其寫入指定的文件路徑。

    捕獲堆轉儲后,可以使用HeapHero和Eclipse MAT之類的工具來分析堆轉儲。

    -XX:OnOutOfMemoryError

    您可以將JVM配置為在拋出OutOfMemoryError時調用任何腳本。 大多數情況下,OutOfMemoryError不會使應用程序崩潰。 但是,一旦發生OutOfMemoryError,最好重新啟動應用程序。 因為OutOfMemoryError可能會使應用程序處于不穩定狀態。 來自不穩定的應用程序實例的請求可能會導致錯誤的結果。

    例:

    -XX:OnOutOfMemoryError=/scripts/restart-myapp.sh

    傳遞此參數時,每當拋出OutOfMemoryError時,JVM將調用“ /scripts/restart-myapp.sh”腳本。 在此腳本中,您可以編寫代碼以優雅地重新啟動應用程序。

    (3).XX:+ CrashOnOutOfMemoryError

    當您傳遞此參數時,JVM將在拋出OutOfMemoryError時立即退出。 除了退出之外,JVM還會生成文本和二進制崩潰文件(如果啟用了核心文件)。 但就我個人而言,我不希望配置該參數,因為我們應該始終以實現正常退出為目標。 突然退出可能/將危害正在進行的交易。

    我運行了一個使用此'-XX:+ CrashOnOutOfMemoryError'參數生成OutOfMemoryError的應用程序。 當拋出OutOfMemoryError時,我可以看到JVM立即退出。 以下是標準輸出流中的消息:

    Aborting due to java.lang.OutOfMemoryError: GC overhead limit exceeded # # A fatal error has been detected by the Java Runtime Environment: # # Internal Error (debug.cpp: 308 ), pid= 26064 , tid= 0x0000000000004f4c # fatal error: OutOfMemory encountered: GC overhead limit exceeded # .0_181-b13) (build # JRE version: Java(TM) SE Runtime Environment ( 8 .0_181-b13) (build 1.8 .0_181-b13) -Bit Server VM ( # Java VM: Java HotSpot(TM) 64 -Bit Server VM ( 25.181 -b13 mixed mode windows-amd64 compressed oops) # Failed to write core dump. Minidumps are not enabled by default on client versions of Windows # Failed to write core dump. Minidumps are not enabled by # # An error report file with more information is saved as: # C:workspacetier1app-svntrunkbuggyapphs_err_pid26064.log # # If you would like to submit a bug report, please visit: //bugreport.java.com/bugreport/crash.jsp # http: //bugreport.java.com/bugreport/crash.jsp #

    從該消息中,您可以在“ C:workspacetier1app-svntrunkbuggyapphs_err_pid26064.log”中看到要生成的hs_err_pid文件。 hs_err_pid文件包含有關崩潰的信息。 您可以使用諸如fastThread之類的工具來分析hs_err_pid文件。 但是hs_err_pid中存在的大多數時間信息都是非常基本的。 不足以對OutOfMemoryError進行故障排除。

    -XX:+ ExitOnOutOfMemoryError

    傳遞此參數時,拋出OutOfMemoryError時,JVM將立即退出。 如果您想終止應用程序,則可以傳遞此參數。 但就我個人而言,我不希望配置該參數,因為我們應該始終以實現正常退出為目標。 突然退出可能/將危害正在進行的交易。

    我使用此'XX:+ ExitOnOutOfMemoryError'JVM參數運行了相同的內存泄漏程序。 與“ -XX:+ CrashOnOutOfMemoryError”不同,此JVM參數不會生成任何文本/二進制文件。 JVM剛剛退出。

    翻譯自: https://www.javacodegeeks.com/2019/10/outofmemoryerror-related-jvm-arguments.html

    總結

    以上是生活随笔為你收集整理的与OutOfMemoryError相关的JVM参数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。