使用 -XX:HeapDumpPath 选项,但希望集成进程 ID

2022-09-03 01:57:09

使用 JVM 时,如果指定路径下已有转储文件,则不会覆盖堆转储。我希望能够在非默认位置拥有多个堆转储,并计划在堆转储路径中使用pid以允许这样做。-XX:+HeapDumpOnOutOfMemoryError

但是,当我尝试像这样指定参数时:

-XX:HeapDumpPath=some/heapdump/path/heapdump-%p.hprof

然后创建了一个堆转储,我得到了而不是文件名中的实际pid。但是,使用 似乎与该选项一起使用。我应该使用其他语法吗?%p%p-XX:OnOutOfMemoryError-XX:HeapDumpPath=


答案 1

这可以是文件 OR 目录的路径。如果您有目录的路径,则默认情况下,生成的文件名中将包含 pid。

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html


答案 2

您应该添加您使用的 Java。这些选项取决于 JVM 供应商(IBM、Oracle 等)。

OnOutOfMemoryError说什么时候执行转储。HeapDumpPath说在哪里放置转储。我认为使用HeapDumpPath会打开第一个,但为了清楚起见,我建议同时使用两者。

关于原始问题,在转储文件名中使用 pid 是一种很好的做法。它特别有助于解释和分析多个问题/重新启动后发生的情况。

此处将解释确切的语法。


推荐