You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java8+Tomcat8部署SpringMVC项目出现OutOfMemoryError错误求排查方案

需要核对的配置项清单

1. JVM内存相关配置

对应错误java.lang.OutOfMemoryError: GC overhead limit exceeded,该错误表示JVM连续多次GC仅回收了不足2%的堆内存,优先核对Tomcat启动参数(一般配置在catalina.sh/catalina.bat的CATALINA_OPTS/JAVA_OPTS字段中):

  • 堆内存上下限:核对-Xms(初始堆内存)、-Xmx(最大堆内存)配置值,是否远低于应用运行所需内存,建议将两个参数设为相同值,避免运行时动态调整堆内存的额外开销
  • 元空间配置:核对-XX:MaxMetaspaceSize配置,Java8用元空间替代永久代,若未配置上限会占用系统内存触发频繁GC,建议至少设置为512m
  • 新生代配置:核对-Xmn/-XX:NewRatio配置,新生代内存过小会导致频繁 Young GC,拉高整体GC耗时,建议新生代内存占总堆内存的1/3~1/2

2. 垃圾回收相关配置

  • 核对是否开启GC日志:建议添加-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./gc.log参数,方便后续定位是内存配置不足还是应用存在内存泄漏
  • 核对-XX:+UseGCOverheadLimit参数:该参数默认开启,若被手动关闭会隐藏GC超限错误,导致进程持续无响应不退出,不建议关闭

3. Tomcat运行配置

对应日志中大量线程处于WAITING (parking)阻塞状态,核对conf/server.xml中的配置:

  • 线程池配置:核对Executor标签的maxThreads(最大工作线程数)、maxQueueCapacity(任务队列最大长度)参数,默认Tomcat任务队列为无界队列,请求量超过处理上限时会堆积大量任务占用内存,建议设置合理的队列上限
  • NIO连接配置:核对NioEndpoint相关的connectionTimeout(连接超时时间)、acceptCount(等待队列长度)参数,避免无效连接长期占用资源

4. 安全随机数与JDK版本配置

对应日志中SecureRandom抛出的数组越界错误:

  • 核对Java8小版本号:Java8 update 191之前的版本存在sun.security.provider.SecureRandom数组越界的已知BUG,建议升级到Java8最新小版本
  • 核对JREjava.security配置文件中的securerandom.source参数:默认值为/dev/random,Linux环境下熵池不足时会发生阻塞,大量SSL握手请求会导致线程堆积,建议修改为/dev/./urandom降低阻塞概率

内容的提问来源于stack exchange,提问作者Mansal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:45:02