Java 将JVM堆转储写入标准输出
我们使用以下JVM标志在Docker内部运行Spring引导应用程序(由Kubernetes管理) 正如预期的那样,容器会在OOM异常时重新启动。但是,由于容器已重新启动,在退出时创建的堆转储(在/tmp中)不再可用。虽然我们可以映射一个持久卷,但有没有一种方法可以将堆转储写入STDOUT(因为我们已经从STDOUT收集日志)?使用Java 将JVM堆转储写入标准输出,java,docker,heap-dump,Java,Docker,Heap Dump,我们使用以下JVM标志在Docker内部运行Spring引导应用程序(由Kubernetes管理) 正如预期的那样,容器会在OOM异常时重新启动。但是,由于容器已重新启动,在退出时创建的堆转储(在/tmp中)不再可用。虽然我们可以映射一个持久卷,但有没有一种方法可以将堆转储写入STDOUT(因为我们已经从STDOUT收集日志)?使用-XX:HeapDumpPath=/dev/stdout会导致 * * 是否有一个简单的工作是我在这里缺少的?就我个人而言,我会使用一个挂载在Docker映像中并存储
-XX:HeapDumpPath=/dev/stdout
会导致
*
*
是否有一个简单的工作是我在这里缺少的?就我个人而言,我会使用一个挂载在Docker映像中并存储在那里的内存转储,如前所述,可以是GBs大。一个堆转储™ 大多数情况下都是巨大的(即堆大小,可能至少有几百MB)。你真的想把它扔出去吗?我知道它可能很大。但是,正如我所提到的,我们已经将STDOUT内容路由到我们的日志基础设施,该基础设施可以处理相同的问题。
-XX:HeapDumpPath=/dev/stdout/`date`.hprof
Dumping heap to /dev/stdout ...
Unable to create /dev/stdout: File exists
-XX:HeapDumpPath=/dev/stdout/`date`.hprof