与OutOfMemoryError相关的JVM参数
JVM提供了有用的參數來處理OutOfMemoryError 。 在本文中,我們要強調那些JVM參數。 在對OutOfMemoryError進行故障排除時,它可能對您很方便。 這些JVM參數是:
讓我們在本文中詳細討論這些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参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星电视怎么投屏电脑版(三星平板电脑如何
- 下一篇: 使用WireMock进行更好的集成测试