如何在 JMeter 中更正 compose 采样器

问题描述 投票:0回答:1

我想使用 JMeter 定义一个计划测试来评估两个不同服务的组成并分析它们在存在并发线程的情况下如何响应。然而,得到的结果与预期不同。

例如,假设我们有一个

sampler1
,其平均响应时间为
6ms
,只有一个线程 (
N=1
)。通过将线程数量增加到
N=10
,我观察到响应时间增加到大约
60ms
。此外,假设我们有一个
sampler2
,其平均响应时间为
12ms
N=1
。当
N=10
时,我们大约得到
120ms
。 现在,如果我们尝试按顺序组合
sampler1
sampler2
,我预计对于
N=1
,平均响应时间将为
6+12=18ms
。而对于
N=10
,平均响应时间将为
60+120=180ms
。相反,在后一种情况下,我发现最快的服务(即
sampler1
)继续表现得像非并发情况(即大约
6ms
),而只有最慢的服务受到并发的影响。

我将使用的配置保留在下面。为了进行此实验,我实现了一个计算第一个

n
自然数的 Servlet(
sampler1
需要
n=10000000
,而
sampler2
需要
n=20000000
)。这些服务托管在 WildFly 上,并使用 Docker 进行部署,将它们暴露给独特的端口并分配专用资源以使它们独立。

@WebServlet("/service/sum")
public class SumServiceServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String paramN = Long.parseLong(request.getParameter("n"));

        // Calculate the sum of the first n natural numbers.
        long sum = 0;
        for (long i = 1; i <= n; i++) {
            sum += i;
        }

        // Return the result.
        response.setContentType("text/plain");
        response.getWriter().write(
            "Sum of the first " + n + " natural numbers: " + sum
        );
    }
}
services:
  service_1:
    image: jboss/wildfly:latest
    container_name: service_1
    ports:
      - "8080:8080"
    cpuset: '0'
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: '1024M'
    volumes:
      - ./target/ROOT.war:/opt/jboss/wildfly/standalone/deployments/ROOT.war
  
  service_2:
    image: jboss/wildfly:latest
    container_name: service_2
    ports:
      - "8081:8080"
    cpuset: '1'
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: '1024M'
    volumes:
      - ./target/ROOT.war:/opt/jboss/wildfly/standalone/deployments/ROOT.war

如何用JMeter正确模拟问题并达到预期的结果(即JMeter的配置可以解决这个问题)。我还尝试限制输入吞吐量以避免在较慢的服务上形成队列,但我找不到正确的配置来实现预期结果。

java docker servlets jmeter wildfly
1个回答
0
投票

JMeter 将在发送下一个请求之前等待上一个请求的响应,这意味着如果您将 2 个 HTTP 请求 采样器放入单个线程组中 - 两个请求都将以最慢的 API 端点吞吐量的吞吐量执行。

解决方案是将这些 HTTP 请求采样器放置在不同的线程组中。

enter image description here

另外关于使用 Docker 的方法 - 这不是您通常应该做的事情,因为您无法推断性能测试结果,您应该针对生产环境或其副本运行负载测试(除非您正在做某种形式的可扩展性测试

© www.soinside.com 2019 - 2024. All rights reserved.