我们正在使用以下JVM标志在Docker(由Kubernetes管理)中运行Spring Boot应用程序

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -XX:+ExitOnOutofMemoryError

如预期的那样,容器将在OOM异常后重新启动。但是,在退出时(在/tmp中)创建的堆转储不再可用,因为容器已重新启动。尽管我们可以映射一个持久卷,但是有没有一种方法可以将堆转储写入STDOUT(因为我们已经从STDOUT收集了日志)?使用-XX:HeapDumpPath=/dev/stdout结果

*
Dumping heap to /dev/stdout ...
Unable to create /dev/stdout: File exists

*

我在这里缺少一个简单的解决方法吗?

最佳答案

就个人而言,我将使用Docker Volume挂载到Docker镜像中,并在其中存储内存转储,如前所述,该内存转储可能是GB的。

关于java - 将JVM堆转储写入标准输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48808099/

10-16 21:52