在 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
当前共有 条评论