JMeter或Apache ab哪种测量方法正确?

我开始用JMeter编写一些基本测试,但感到惊讶的是,这些测量结果与Apache ab的测量结果如此不同。

我有一个千兆局域网,用于连接运行Nginx的Intel i7服务器和运行JMeter或Ab的i5测试机。最初,我只是测试现成的Nginx主页响应率。

ab -c 1 -n 100 http://testserver.local/

Document Path:          /

Document Length: 151 bytes

Concurrency Level: 1

Time taken for tests: 0.078 seconds

Complete requests: 100

Failed requests: 0

Write errors: 0

Total transferred: 38400 bytes

HTML transferred: 15100 bytes

Requests per second: 1280.77 [#/sec] (mean)

Time per request: 0.781 [ms] (mean)

Time per request: 0.781 [ms] (mean, across all concurrent requests)

Transfer rate: 480.29 [Kbytes/sec] received

此结果始终可重复,+ /-几个百分点。

在JMeter中,我有一个包含1个用户的100循环线程组:

  • HTTP标头管理器设置Accept-Encoding:gzip
  • HTTP Get /采样器
  • 摘要报告侦听器

仅使用100个样本,每次运行它都会产生不一致的结果。但是,最令人吃惊的事实是,据报道吞吐量低至每秒40个请求(而不是1280个)。记录的最高速率是1030,只有当我增加到10,000个样本时才实现。

我是否认为JMeter是简单负载测试的错误工具,因为它的开销太高而无法进行精确测量?

回答:

Jmeter告诉您每个请求

花费了多长时间。AB只是做一些非常基本的数学运算以获得总平均值。因此,对您的问题的直接答案是jmeter正确无误,而ab只是通过为您提供所有平均值的平均值来进行粗略的猜测。

但是,可以肯定的是,如果将两个工具并排放置并对其速度进行评级,那么很明显,ab将会超越jmeter。Jmeter只是做更多的事情,它记录更多的数据并且正在处理更多的逻辑,因此处理单个请求所需的时间更长。一个简单的事实是,Jmeter是功能齐全的负载测试工具,而AB则不是。

事实是, 负载测试

工具的目标不是成为最快的工具,而是要能够构建一种逼真的表示,以表示应用程序上线时可能遭受的负载。在这方面,jmeter可以胜任,所以这实际上取决于您的要求。如果您只想使用最少的硬件来生成尽可能多的请求,那么ab是一个不错的选择,但是如果您要构建具有事务性旅程,条件逻辑和各种其他有用内容的代表性测试,那么jmeter是要走的路。可以这样想:它们都是Apache项目,但是我认为AB旨在测试apache

Web服务器,而JMeter则旨在测试Tomcat。

现在,我猜测jmeter产生不一致的结果,因为它达到了运行它的机器的极限。我敢打赌,您正在GUI模式下运行,并且至少有一个监听器处于活动状态,像这样,您正在要求该工具执行很多操作。如果您需要很高的请求率,则Jmeter具有精益和均值模式。通常,对于大批量,最佳实践是在命令行上以很少的侦听器执行测试。apache

jmeter网站上有很多关于此主题的信息。

如果您真的要进行负载测试,则应该考虑的另一点是,要真正从此类事情中受益,您需要首先确定站点需要支持的负载类型,然后再进行设计代表这一点的测试。使用起搏和模拟等待时间即可实现。告诉线程应该尽可能快地消失并尽可能快地运行的问题是,它将在其本地条件允许的情况下尽快进行迭代,但是

总会 有些中断,即使ab是有限; 不管工具多么轻巧,它仍然会做 一些事情

。但是,如果您调整请求的速度,则可以消除此问题,并且作为相当有用的额外好处,最终可以在运行之间和代码构建之间保持一致性,因此即使服务器加速或减速(更改代码库)也是如此您的测试仍将以相同的请求速率进行请求-

这对于基准测试非常有用。

如果您想进一步了解JMeter,请查看“恒定吞吐量计时器”,然后使用多个线程来构建您需要表示的流量级别。

以上是 JMeter或Apache ab哪种测量方法正确? 的全部内容, 来源链接: utcz.com/qa/420671.html

回到顶部