我开始在 JMeter 中编写一些基本测试,并惊讶于测量结果与 Apache ab 的测量结果如此不同。
我有一个千兆 LAN 连接运行 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 获取/采样器
- 总结报告监听器
只有 100 个样本,每次我运行它都会得到非常不一致的结果。但最令人吃惊的事实是,吞吐量报告低至每秒 40 个请求(而不是 1280)。最高记录率是 1030,这只有在我增加到 10,000 个样本时才实现。
我是否认为 JMeter 是简单负载测试的错误工具,因为它的开销太高而无法进行准确测量?