我想使用 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的配置可以解决这个问题)。我还尝试限制输入吞吐量以避免在较慢的服务上形成队列,但我找不到正确的配置来实现预期结果。