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

SpringBoot REST服务无法达到预期负载的问题排查求助

SpringBoot极简服务TPS无法突破400问题排查

我有个SpringBoot应用扛不住预期负载,为了隔离问题,做了个极简服务——仅休眠500ms后返回成功响应,但无论怎么调整Tomcat或SoapUI配置,应用的TPS始终无法超过400。

服务端Tomcat配置

server:
  tomcat:
    protocol: org.apache.coyote.http11.Http11NioProtocol
    accesslog:
      enabled: false
    max-connections: 10000
    threads:
      max: 1000
      min-spare: 1000
    accept-count: 1000

已通过Jconsole连接进程,确认min-spare线程配置已生效。

SoapUI负载测试配置

Thread: 5000 (5000 concurrent users)
Strategy: Simple
Test Delay: 0
Random: 0

测试结果

min: 500
max: 959
avg: 510
tps: 386
err: 0

问题分析与优化方向

1. 排查SoapUI客户端瓶颈

5000并发线程可能超出SoapUI的处理能力,导致客户端无法发起足够请求。SoapUI基于Java,默认堆内存有限,大量线程会引发内存不足或线程阻塞:

  • 调大SoapUI的JVM堆内存(修改安装目录下的soapui.vmoptions文件,比如设置-Xms4g -Xmx4g)
  • 换用JMeter等专业压测工具对比测试,排除客户端限制

2. 操作系统层面限制

客户端和服务端的系统参数可能限制了并发连接数:

  • 服务端:检查Linux文件句柄限制,执行ulimit -n确保值大于10000,可通过ulimit -n 65535临时调整,或修改/etc/security/limits.conf永久生效
  • 客户端:短时间大量连接会导致TIME_WAIT端口耗尽,可调整系统参数开启端口复用(net.ipv4.tcp_tw_reuse=1)、缩短TIME_WAIT超时时间(net.ipv4.tcp_fin_timeout=30)

3. Tomcat NIO参数优化

当前仅配置了线程数和连接数,NIO的acceptor/selector线程数可能成为瓶颈:

  • 添加以下配置调整线程数(根据CPU核心数调整,比如4核CPU可设置):
server:
  tomcat:
    acceptor-threads: 4
    selector-threads: 8

4. 排除网络瓶颈

将压测工具部署到服务端本地执行,排除跨网络的带宽、延迟影响。如果本地压测TPS正常,说明问题出在网络链路。

5. JVM参数优化

检查JVM GC日志,若存在频繁Full GC或长停顿,会影响服务处理效率:

  • 调整堆内存大小(如-Xms4g -Xmx4g)
  • 使用低停顿垃圾收集器(如G1GC,添加参数-XX:+UseG1GC)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:32:40