我有多个Java进程,我正在尝试管理在发生OOM错误时创建的堆转储。当我说管理时,我的意思是:
- 基于源进程不同命名堆转储
- 删除旧的堆转储以保留磁盘空间
在发生OOM时进行堆转储。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp
JVM在指定的/tmp文件夹中创建一个名为java_pidXXXX.hprof的文件(其中XXXX是进程的PID)。是否有一种方法可以指定不同的格式,其中PID和DATE用于创建文件名?经过一小时的谷歌搜索,我尝试了myPrefix_$,{pid},'date'等。唯一有效的两个选项是:
- 不指定文件名,将获得java_pidXXXX.hprof
- 指定静态文件名,例如\tmp\OOM.hprof。
如果/tmp文件夹不存在,则不会创建它,也不会创建堆转储。唯一可行的想法是在OOM错误时添加一个命令。
-XX:OnOutOfMemoryError="doSomething.sh %p"
但我试图避免这样做,因为我需要部署“doSomething.sh”