将JVM堆转储写入stdout

时间:2018-02-15 13:09:16

标签: java docker heap-dump

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

-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

*

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

2 个答案:

答案 0 :(得分:0)

就个人而言,我会使用Docker Volume安装在Docker镜像中并在那里存储内存转储,如前所述,它可能是GB很大。

答案 1 :(得分:0)

-XX:HeapDumpPath=/dev/stdout/`date`.hprof