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

如何正确配置JMeter组合采样器以模拟服务并发场景?

问题分析

你的核心问题是:当用JMeter并发测试两个串行服务请求时,CPU密集型的service1在高并发下未出现预期的响应时间上升。原因是JMeter默认的线程启动节奏和请求发送方式,没有让service1的单核CPU达到饱和排队状态。service1绑定到CPU0,单核处理10个并发请求时必须串行执行,理论上响应时间应线性增长,但实际每个请求仍能快速处理,说明请求并非同时到达service1,未形成排队压力。

解决方案

1. 调整JMeter测试计划结构

确保测试计划层级如下:

  • 线程组(线程数=10,Ramp-Up=0,循环次数=10)
    • 同步定时器(Synchronizing Timer)
      • HTTP请求(sampler1:访问service1的sum接口,n=10000000)
    • HTTP请求(sampler2:访问service2的sum接口,n=20000000)

2. 配置同步定时器

在sampler1前添加同步定时器,设置「Number of Simultaneous Users to Group by」为10,让所有10个线程在发送sampler1请求前同步等待,瞬间触发10个并发请求到service1。这样service1的单核CPU会同时收到10个请求,进入排队处理状态,响应时间会上升到约60ms,符合预期。

3. 验证WildFly线程池配置

确保WildFly的工作线程数足够接收并发请求(默认配置通常满足,可检查standalone.xml中的线程配置):

<subsystem xmlns="urn:jboss:domain:undertow:12.0">
  <buffer-cache name="default"/>
  <server name="default-server">
    <http-listener name="default" socket-binding="http" redirect-socket="https"/>
    <host name="default-host" alias="localhost">
      <location name="/" handler="welcome-content"/>
      <filter-ref name="server-header"/>
      <filter-ref name="x-powered-by-header"/>
    </host>
  </server>
  <servlet-container name="default">
    <jsp-config/>
    <websockets/>
  </servlet-container>
  <handlers>
    <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
  </handlers>
  <filters>
    <response-header name="server-header" header-name="Server" header-value="WildFly"/>
    <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow"/>
  </filters>
</subsystem>

4. 调整JMeter基础配置

  • 设置HTTP请求的超时时间为1000ms以上,避免请求被提前中断
  • 启用聚合报告和查看结果树组件,确保完整收集每个请求的响应时间数据
预期结果

配置完成后:

  • N=1时,总响应时间约为6+12=18ms
  • N=10时,sampler1平均响应时间约60ms,sampler2约120ms,总响应时间约180ms

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:01:15