ELB架构下JMeter录制脚本后多线程组仅访问单台Web服务器的问题咨询
嘿,我来帮你排查这个ELB负载分发但JMeter只访问单台Web服务器的问题!这种情况在测试负载均衡时很常见,大概率是这几个细节在搞鬼,咱们一步步来解决:
问题排查与解决方案
1. 先检查ELB的会话保持(粘性会话)配置
ELB默认可能开启了会话保持功能,它会把同一个客户端的所有请求都绑定到同一台后端Web服务器上——不管你用浏览器录制还是JMeter多线程测试,都会被“粘”在一台服务器上。
- 你可以登录云平台的ELB管理界面,找到会话保持(Sticky Sessions)的设置:
- 如果是基于Cookie的会话保持,浏览器和JMeter都会被分配固定的服务器;
- 解决方案:临时关闭会话保持,或者把会话超时时间调到最短(比如1秒),测试完成后再改回原有配置即可。
2. 关闭JMeter的HTTP连接复用
JMeter默认会复用HTTP连接,这意味着同一个线程的所有请求都会走同一个TCP连接,而ELB可能会基于连接来做分发,导致所有请求都打到同一台服务器。
- 解决方法:在JMeter的HTTP请求或者HTTP请求默认值组件里,找到「Use keepalive」选项,取消勾选。这样每个请求都会建立新的连接,ELB就会重新进行负载分发。
3. 排查录制时的浏览器会话问题
你用Firefox录制时,浏览器可能已经和某台Web服务器建立了会话,导致后续录制的请求都默认走这台服务器。
- 解决方法:录制前先清除Firefox的缓存和Cookie,或者直接用隐私浏览模式(Incognito Mode)来录制——这样每次都是全新的会话,ELB会重新分配后端服务器。
4. 调整多线程组的会话隔离配置
如果你的多线程组没有做会话隔离,所有线程共享同一个Cookie或上下文,也会导致请求集中在一台服务器上。
- 解决方法:
- 添加HTTP Cookie管理器,并勾选「清除每次迭代的Cookie」,让每个线程迭代都重新获取Cookie,避免会话绑定;
- 确保线程数足够多(比如至少10个以上),请求量太小的话,ELB可能还没触发负载分发逻辑。
5. 验证ELB的健康检查状态
有时候其中一台Web服务器的健康检查失败了,ELB会自动把所有请求都转发到健康的那台服务器上,看起来就像没做负载分发。
- 解决方法:去ELB的健康检查页面,确认两台Web服务器都处于「健康」状态。如果有一台不健康,先修复Web服务的问题(比如检查服务是否正常运行、端口是否开放)。
测试验证
修改配置后,你可以在JMeter里添加查看结果树组件,查看每个请求响应头里的Server字段(或者Web服务器自定义的标识),确认请求是否分发到了两台不同的服务器。另外,也可以直接查看两台Web服务器的访问日志,看看JMeter的请求是否同时出现在日志里。
内容的提问来源于stack exchange,提问作者Brenda Olivia Martis
相关产品推荐
相关产品推荐

