SpringBoot项目部署Linux后JMeter并发测试出429错误,如何解决?
解决SpringBoot项目服务器端JMeter测试出现429错误的方案
1. 修正Tomcat配置的格式问题
你的Tomcat配置缺少server顶层节点,SpringBoot无法正确识别这些参数,导致Tomcat使用默认配置(默认max-threads为200、accept-count为100),这是引发429错误的核心原因之一。
正确的YAML配置格式应为:
server: tomcat: max-threads: 800 accept-count: 1000 max-connections: 10000 min-spare-threads: 100
修改后重启项目,在启动日志中搜索maxThreads、acceptCount、maxConnections关键词,确认Tomcat初始化时加载了上述配置参数。
2. 调整Linux系统的文件描述符限制
Tomcat的max-connections设置依赖于系统允许的最大打开文件数,Linux默认的文件描述符限制(通常为1024)远低于你配置的10000,会导致Tomcat无法处理足够的连接,进而返回429错误。
临时生效(重启服务器后失效)
执行命令:
ulimit -n 16384
永久生效
编辑/etc/security/limits.conf文件,添加以下内容:
* soft nofile 16384 * hard nofile 16384
保存后重启服务器,或重新登录用户使配置生效。
3. 排查项目中的限流组件
检查项目中是否引入了以下限流相关组件:
- Spring Security的速率限制规则
- Spring Cloud Gateway的限流过滤器
- 自定义的限流实现(如基于Redis的令牌桶/漏桶算法)
这些组件会独立于Tomcat线程池限制请求频率,即使Tomcat配置足够,也可能返回429错误。可以临时禁用这些组件后重新测试,确认是否是限流规则导致的问题,再针对性调整规则阈值。
4. 监控Tomcat的运行状态
通过JMX连接Tomcat,监控以下指标:
- 当前活跃线程数
- 等待队列长度
- 已建立连接数
如果这些指标达到了配置的阈值,说明Tomcat的资源确实不足以处理请求,需要根据服务器硬件配置(CPU核心数、内存)进一步调整max-threads、max-connections等参数(通常max-threads设置为CPU核心数的2-4倍较为合理)。
内容的提问来源于stack exchange,提问作者miniWorld
相关产品推荐
相关产品推荐

