JMeter 5.5并发测试超时求助:HttpHostConnectException等错误排查
问题描述
我正在使用Apache JMeter 5.5版本,尝试运行超过500用户的压测场景。测试在200用户以内无报错,但超过该数量后开始抛出以下错误:Non HTTP response code: org.apache.http.conn.HttpHostConnectExceptionNon HTTP response code: org.apache.http.conn.ConnectTimeoutExceptionNon HTTP response code: java.net.SocketTimeoutException
错误分为两类:
- 超时错误
- 读取超时错误
已尝试的解决方案:
- 启用并检查keep-alive设置
- 将超时时间设置为100000毫秒
请问如何解决这些错误?这些错误是来自JMeter脚本还是服务器端?
解决方案与错误定位
一、错误来源判断
这些错误大概率是服务器端或网络层面的瓶颈导致,而非JMeter脚本本身,理由如下:
- 200用户以内正常、超过后报错,说明负载超过了目标服务/网络的处理阈值
HttpHostConnectException:无法建立TCP连接,通常是服务器连接数耗尽(如操作系统文件句柄限制、Web服务器最大连接数配置不足)ConnectTimeoutException:发起连接后超时,说明服务器来不及响应新的连接请求SocketTimeoutException:连接建立后读取响应超时,说明服务器处理请求的速度跟不上,请求堆积导致超时
二、JMeter端优化(减少不必要的负载损耗)
调整加压模式
- 不要一次性启动500用户,改用阶梯式加压(可借助Stepping Thread Group插件),模拟真实用户逐步涌入的场景,避免瞬间压垮服务器
- 合理设置
Ramp-Up Period,比如500用户设置500秒,每秒启动1个用户,给服务器缓冲时间
优化HTTP请求配置
- 确保
HTTP Request的Implementation选择HttpClient4(JMeter默认),它比旧Java实现更高效 - 在
HTTP Request Defaults的Advanced标签中,调整连接池参数:设置Max Connections per Host为500、Max Total Connections为1000,避免JMeter端连接不足 - 压测时禁用
View Results Tree、Summary Report等GUI监听器,改用命令行模式或后端监听器(如InfluxDB+Grafana),减少JMeter本地资源消耗
- 确保
提升JMeter本地性能
- 修改
jmeter.bat/jmeter.sh中的JVM参数,增加堆内存:例如设置HEAP="-Xms2g -Xmx4g"(根据本地机器配置调整,不超过物理内存的70%) - 确保JMeter运行在64位JDK环境下,避免32位JVM的内存限制
- 修改
三、服务器端及网络排查
检查服务器资源瓶颈
- 监控CPU、内存、磁盘IO、网络带宽:用
top(Linux)或任务管理器(Windows)查看,若某一项资源使用率接近100%,即为对应瓶颈 - 查看Web服务器日志(如Nginx、Tomcat的
access.log/error.log),确认是否有连接拒绝、超时相关的错误 - 调整服务器TCP连接限制:Linux下用
sysctl net.core.somaxconn查看最大监听队列长度,ulimit -n查看文件句柄限制,若值过小,需修改配置(如sysctl -w net.core.somaxconn=1024、ulimit -n 65535,并写入配置文件永久生效)
- 监控CPU、内存、磁盘IO、网络带宽:用
调整Web服务器配置
- 提升Web服务器最大连接数:例如Tomcat在
server.xml中修改maxConnections、maxThreads;Nginx在nginx.conf中修改worker_connections - 确保服务器端开启keep-alive:Tomcat默认开启,Nginx需配置
keepalive_timeout,与JMeter的设置保持匹配
- 提升Web服务器最大连接数:例如Tomcat在
网络层面排查
- 用
ping、traceroute(Linux)/tracert(Windows)测试JMeter机器与目标服务器之间的网络延迟、丢包情况 - 确认防火墙、负载均衡器是否限制了连接数或带宽
- 用
四、精准定位错误来源的方法
- 在200用户正常运行时,同时监控服务器资源和连接数:若资源还有剩余,可能是JMeter端配置问题;若资源已饱和,肯定是服务器端瓶颈
- 高负载时用
telnet或curl测试服务器端口:若无法连接,说明服务器拒绝新连接 - 查看JMeter的
jmeter.log:若有OutOfMemoryError等本地资源报错,则是JMeter端问题
内容的提问来源于stack exchange,提问作者Sunanda Menashinkai
相关产品推荐
相关产品推荐

