将 JVM 堆转储写入标准输出

问题描述 投票:0回答:3

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

-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

*

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

java docker heap-dump
3个回答
0
投票

就个人而言,我会使用 Docker Volume 挂载到 Docker 映像中,并在那里存储内存转储,如前所述,内存转储可能有 GB 大。


0
投票

我发现这个问题和你的一样,但需要解决,没有简单的方法来做到这一点,并记住在创建新的 dunp 文件时删除旧文件,避免磁盘使用已满。 在此输入链接描述


-1
投票
-XX:HeapDumpPath=/dev/stdout/`date`.hprof
© www.soinside.com 2019 - 2024. All rights reserved.