簡體   English   中英

jvm 創建堆轉儲但沒有超出 memory

[英]jvm create heap dump but without out of memory

我已經添加了 JVM 參數:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:\Temp 有時我看到 JVM 創建了 heapdump 文件但沒有 OutOfMemoryError 文件在應用程序日志中報告。 我的問題是 JVM 如何創建堆轉儲文件而不拋出任何錯誤。 可能是應用程序 (AEM) 或 JVM 的問題?

如果您的應用程序用完 memory,則很難確切地說會發生什么。

如果我的理解是正確的,那么可能會發生以下情況:當您的 Java 應用程序正在運行時,其中一個線程可能觸發了 OutOfMemoryError。

如果此應用程序沒有 catch 語句(對於 OutOfMemoryError、Error、Throwable)或其他一些機制,例如: https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setDefaultUncaughtExceptionHandler( java.lang.Thread.UncaughtExceptionHandler)記錄到您的應用程序日志文件,您可能看不到它。

但是,可能某些信息已打印到 stdout / stderr 可能(或可能不會)已重定向到其他文件。

為了增加發生這種情況的機會,您可能需要使用類似: -XX:+CrashOnOutOfMemoryError的東西,即使應用程序沒有記錄它也會打印原因。 有關更多信息或其他選項,請參閱: https://dzone.com/articles/outofmemoryerror-related-jvm-arguments

更有用的可能是記錄垃圾收集器的活動和統計數據並對其進行分析。 請參閱:如何啟用 Java GC 日志記錄? https://gceasy.io/

這些選項僅與 JVM 相關,並非特定於應用。 它不太可能與 AEM 相關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM