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

SpringBoot运行大量REST请求出现JRE insufficient memory错误排查求助

问题排查方向
  • 开启JVM Native Memory Tracking定位泄漏来源:启动时追加参数-XX:NativeMemoryTracking=detail,运行过程中执行jcmd <进程PID> VM.native_memory summary scale=MB查看Native内存各分区占用,重点关注Code Cache、Direct Buffer、Thread、Internal等分区的增长趋势,确认泄漏发生的具体区域。
  • 验证Apache Camel组件配置:检查是否开启了不必要的消息追踪、历史Exchange快照留存功能,是否存在全局静态集合持有请求上下文、消息对象的情况,这类引用不会被GC回收,会持续占用内存。
  • 排查内嵌Tomcat连接泄漏:查看Tomcat连接数、超时配置是否合理,是否存在长连接未释放、请求体缓冲区无大小限制的问题。
  • 检查系统缓存占用:执行free -h查看内存结构,确认持续下降的内存是否被系统Page Cache、Buffer占用,而非Java进程本身占用。
优化落地建议

JVM参数优化

  • 解决Native堆地址空间不足问题:追加参数-XX:HeapBaseMinAddress=32g,将Java堆放置在32G虚拟地址空间以上,避免压缩指针限制Native堆的增长空间。
  • 限制堆外内存上限:追加参数-XX:MaxDirectMemorySize=4G,避免Direct Buffer无限制申请堆外内存。
  • 降低线程栈占用:追加参数-Xss512k,将单线程栈大小从默认1M调整为512K,减少线程栈的整体内存开销。
  • 优化GC策略:追加参数-XX:+ExplicitGCInvokesConcurrent,允许显式GC触发并发回收,确保堆外内存关联的幻引用能被及时处理。

应用配置优化

  • 生产环境禁用Swagger:若无需在线接口文档,可在启动参数追加springfox.documentation.enabled=false关闭Swagger,旧版本SpringFox存在元数据缓存泄漏问题,也可替换为内存占用更低的SpringDoc组件。
  • 调优内嵌Tomcat配置:在application.yml中添加以下配置,限制连接数和缓冲区大小:
server:
  tomcat:
    max-connections: 200
    keep-alive-timeout: 30s
    max-http-post-size: 2MB
    connection-timeout: 5s
  • 裁剪Camel冗余功能:关闭Camel的消息 tracing、死信队列默认持久化等非必要功能,确保每个请求处理完成后Exchange对象被正确销毁,无残留引用。

系统层面优化

  • 调整swap使用策略:执行sysctl -w vm.swappiness=10,并将vm.swappiness=10写入/etc/sysctl.conf永久生效,降低系统优先使用swap的概率,避免物理内存闲置但swap占满的问题。
  • 定期清理系统缓存:配置定时任务执行echo 3 > /proc/sys/vm/drop_caches,定期清理系统页缓存、目录项缓存,无需重启虚拟机即可释放被缓存占用的内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 10:36:01