Tomcat 内存溢出定位与解决
一、先判断是哪一类 OOM
二、快速处置与参数调整
三、定位根因的工具与方法
四、按场景给出配置与优化建议
| 场景 | 典型异常 | 优先动作 | 示例参数 |
|---|---|---|---|
| 堆内存不足 | Java heap space | 增大堆、启用高效 GC、减少一次性加载数据 | -Xms1024m -Xmx1024m -XX:+UseG1GC |
| 类元数据过多 | Metaspace / PermGen | 增大元空间上限、减少热部署与重复依赖、排查类加载器泄漏 | -XX:MaxMetaspaceSize=512m(Java 8+) |
| 线程创建失败 | unable to create new native thread | 降低 Tomcat 并发线程、检查系统/容器线程与栈限制、必要时扩容内存 | maxThreads/acceptCount 调小,ulimit 调高 |
| 栈溢出 | StackOverflowError | 优化递归/调用深度、必要时增大线程栈 | -Xss 适度增大(需压测验证) |
| Windows 服务启动参数不生效 | 无变化 | 用 tomcat8w.exe 或注册表设置,或重装服务 | 在 Java Options 中加入 -Xms/-Xmx |
| 以上建议需结合压测与监控逐步验证,避免“拍脑袋”调参。 |
五、常见坑位与预防