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

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

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

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

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

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

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

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

OnOutOfMemoryError表示WHEN执行转储。 HeapDumpPath说WHERE放置转储。 我认为HeapDumpPath的使用首先启用,但我建议使用两者来清晰。

关于原始问题,在转储文件名中使用pid是一个很好的做法。 它可以特别有助于消除和分析多次发布/重启后发生的情况。

这里解释了确切的语法。