java - 将 JVM 堆转储写入标准输出

标签 java docker heap-dump

我们使用以下 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

*

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

最佳答案

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

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

相关文章:

Java - GC 正在运行但不回收任何东西

java - 应用程序服务器在 OOM 异常时重启

java - 检查 Elastic Beanstalk JVM 堆的最佳方法

python - 如何删除 docker 镜像的多个标签(除了一个标签)

java - 如何为 MongoDB 和 Spring Boot 将主机名定义到 docker-compose.yml 中

java - 在 JFace 树查看器中为一些特定的树着色

java - Spring data JPA 获取数据作为对象列表的流

java - 通过带有框架的 Java 代码插件的静态工具分析选项(除了 CAST)是什么?

java - 如何将(org.kohsuke.stapler.)订书机根目录设置为非/目录?

mongodb - 通过本地主机连接到容器:Docker vs Kubernetes