Non-GUI模式运行负载测试脚本执行接近结束时卡住问题求助
3000并发负载测试执行末尾卡住问题排查方案
核心问题分析
从提供的运行日志可以判断问题根源:
summary + 11 in 00:00:31 = 0.4/s Avg: 503 Min: 299 Max: 1447 Err: 0 (0.00%) Active: 136 Started: 3000 Finished: 2864 summary = 82078 in 00:07:42 = 177.7/s Avg: 2639 Min: 233 Max: 244776 Err: 177 (0.22%)
当前仍有136个活跃线程未完成执行,单请求最大响应时间达244776ms(约4.08分钟),说明存在部分请求无限制等待响应,没有触发超时终止逻辑,导致压测进程一直挂住无法结束。
排查步骤
被压服务侧排查
- 检查服务所在服务器的CPU、内存、磁盘IO、网络带宽、TCP连接数等核心资源指标,确认是否出现资源耗尽、连接数打满的情况,导致请求无法被处理也无法返回响应。
- 查看服务的错误日志,排查是否存在死锁、OOM、线程池耗尽、数据库连接池打满等异常,这类问题会导致请求进入永久等待状态。
- 确认服务端的请求超时配置,未配置合理超时的话,异常慢请求会一直占用连接不主动断开。
压测工具侧排查
- 检查压测脚本的请求配置,确认是否设置了连接超时和响应超时参数,若未配置超时,服务端不返回响应时压测线程会一直等待,不会主动退出。
- 查看压测机本身的资源占用情况,确认是否是压测机端口耗尽、内存不足、CPU占满,导致无法接收响应或者终止线程。
- 检查压测脚本逻辑是否存在死循环、异常分支未设置退出条件的问题,部分低概率触发的逻辑在高并发场景下可能被触发导致线程卡住。
修复建议
- 给所有压测请求添加超时配置,超时阈值建议设置为99分位响应时间的2~3倍,避免请求无限等待。
- 调整压测参数,可适当降低constant timer的固定等待时长,改用吞吐量控制器动态控制请求速率,避免请求持续堆积超过服务承载上限。
- 服务端开启请求熔断、慢请求自动断开的配置,避免异常请求长期占用系统资源。
内容的提问来源于stack exchange,提问作者santhosh selvam
相关产品推荐
相关产品推荐

