在 Java Spring Boot 项目中,可以通过添加 JVM 参数来在发生 **OOM(OutOfMemoryError)** 时记录相关信息。以下是常用的命令参数:


### 常用 JVM OOM 相关参数


1. **`-XX:+HeapDumpOnOutOfMemoryError`**  

   在内存溢出时生成堆转储文件(heap dump),用于后续分析。

   

2. **`-XX:HeapDumpPath=<path>`**  

   指定生成的堆转储文件的保存路径,例如 `-XX:HeapDumpPath=/logs/heapdump.hprof`。


3. **`-XX:+PrintGCDetails`**  

   输出详细的 GC 日志信息。


4. **`-XX:+PrintGCDateStamps`**  

   打印 GC 发生的时间戳。


5. **`-Xlog:gc*:time:file=<file-path>:time` (JDK9+) 或使用 `-verbose:gc`**  

   将 GC 日志输出到指定文件,便于排查 OOM 问题。


6. **`-XX:OnOutOfMemoryError="<cmd args>";<cmd args>`**  

   在 OOM 发生时执行自定义脚本或命令,如发送通知、记录日志等。


---


### 示例启动命令


```bash

java -jar \

  -XX:+HeapDumpOnOutOfMemoryError \

  -XX:HeapDumpPath=/logs/myapp-oom.hprof \

  -XX:+PrintGCDetails \

  -XX:+PrintGCDateStamps \

  -Xlog:gc*:time:file=/logs/gc.log:time \

  -XX:OnOutOfMemoryError="sh /scripts/oom-handler.sh" \

  myapp.jar

```



---


### 补充建议


- 使用 **`jstat`、`jmap`、`VisualVM`、`MAT`** 等工具分析生成的 `.hprof` 文件。

- 结合 APM 工具(如 SkyWalking、Pinpoint、Prometheus + Grafana)进行实时监控。

- 如果部署在容器中,请确保挂载了持久化存储目录以保留日志和 dump 文件。



###  示例启动命令

java -jar \

  -XX:+HeapDumpOnOutOfMemoryError \

  -XX:HeapDumpPath=/logs/myapp-oom.hprof \

  -XX:+PrintGCDetails \

  -XX:+PrintGCDateStamps \

  -Xlog:gc*:time:file=/logs/gc.log:time \

  -XX:OnOutOfMemoryError="sh /scripts/oom-handler.sh" \

  myapp.jar


###  补充建议
使用 jstat、jmap、VisualVM、MAT 等工具分析生成的 .hprof 文件。
结合 APM 工具(如 SkyWalking、Pinpoint、Prometheus + Grafana)进行实时监控。
如果部署在容器中,请确保挂载了持久化存储目录以保留日志和 dump 文件