jvm创建堆转储但没有内存不足

时间:2021-02-15 09:28:54

标签: java memory-leaks aem heap-memory heap-dump

我已经添加了 JVM 参数:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:\Temp 有时我看到JVM创建了heapdump文件,但应用程序error.log文件中没有报告OutOfMemoryError。 我的问题是 JVM 怎么可能在不抛出任何错误的情况下创建堆转储文件。 可能是应用程序 (AEM) 或 JVM 的问题?

2 个答案:

答案 0 :(得分:1)

如果您的应用程序内存不足,则很难准确判断会发生什么。

如果我的理解是正确的,那么可能发生了以下情况:当您的 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

更有用的可能是记录垃圾收集器的活动和统计信息并对其进行分析。请参阅:https://gceasy.io/

上的如何启用 Java GC 日志记录?

答案 1 :(得分:0)

这些选项仅与 JVM 相关,并非特定于应用程序。不太可能与 AEM 相关。

相关问题