如何为Tanuki Wrapper设置OutOfMemoryError触发的DUMP文件存储路径
解决Tanuki Wrapper OOM Dump文件路径指定问题
你遇到的核心问题是:Tanuki Wrapper的DUMP触发机制和JVM原生的堆转储逻辑是独立的,所以你配置的-XX:HeapDumpPath参数对Wrapper触发的DUMP动作完全不生效——毕竟你已经通过wrapper.filter.action.1=DUMP,RESTART让Wrapper接管了OOM时的处理流程,和JVM自带的-XX:HeapDumpOnOutOfMemoryError没关系。
下面给你两种直接可行的解决方案:
方案一:在Action指令中直接指定Dump路径
修改你的过滤动作配置,把目标路径直接追加到DUMP指令后面,格式如下:
wrapper.filter.trigger.1=java.lang.OutOfMemoryError wrapper.filter.action.1=DUMP,C:/test1/java_pid{PID}.hprof,RESTART
这里的{PID}是Tanuki Wrapper的内置占位符,会自动替换为当前Java进程的ID,最终生成类似java_pid1234.hprof的文件,直接存储到C:/test1目录下。
方案二:全局配置Dump默认存储目录
如果希望所有Wrapper触发的DUMP文件都统一存到指定分区,可以添加全局配置项,原Action配置保持简洁:
# 设置全局Dump文件存储目录 wrapper.dump.path=C:/test1 # 原OOM触发和动作配置不变 wrapper.filter.trigger.1=java.lang.OutOfMemoryError wrapper.filter.action.1=DUMP,RESTART
配置后,Wrapper会自动在C:/test1目录下生成以java_pid{PID}.hprof命名的堆转储文件。
关键注意事项
- 确保
C:/test1目录已经提前创建,并且Wrapper运行的系统用户拥有该目录的写入权限,否则可能出现Dump文件生成失败的情况。 - 建议在测试环境模拟OOM场景(比如写个循环创建大对象的简单程序)验证配置,避免线上突发问题时才发现配置未生效。
内容的提问来源于stack exchange,提问作者izocan
相关产品推荐
相关产品推荐

