繁体   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