可能解释很简单 - 但我无法找到答案:
我正在从一个VM(工作人员)到另一个(目标)运行jmeter测试。在工作者我有100个线程(100个用户)的jmeter。在目标上,我有在Apache上运行的API。当我运行" apachetop -f access_log"在目标上,我只看到大约7 req / s。 有人可以解释一下,为什么我没有看到目标上的100个req / s?
在jmeter的测试结果中,我总是看到200 OK,所以所有请求都在击中目标,而且目标总是响应。所以我不会在这里删除任何请求。机器之间的网络带宽为1G。我在这里缺少什么?
谢谢, 爸爸
答案 0 :(得分:1)
Your target load = 100 threads ( you are assuming it should generate 100 req/sec as per your plan)
Your actual load = 7 req / sec = 7*3600 / hour = 25200
Per thread throughput = 25200 / 100 threads = 252 iterations / thread / hour
Per transaction time = 3600 / 252 = 14.2 secs
这意味着,JMeter实际上应该每个线程每14秒发送一次请求。即每14.2秒发出100次请求。
现在,分析您的事务计时器的JMeter摘要报告,找出剩余的13.2秒的使用时间。
可能的问题是 1.高DNS解析时间(DNS问题) 2.高连接建立时间(表示负载平衡器问题) 3.高请求发送时间(表示n / w或防火墙限制问题) 4.高请求接收时间(与#3相同)
现在,您在Apache日志中看到的时间对于JMeter来说几乎是第一个字节时间可见的时间。我不确定您正在运行测试的机器。如果您的工作人员可以支持curl,请使用Curl查找单个请求的组件。
echo 'request payload for POST'
| curl -X POST -H 'User-Agent: myBrowser' -H 'Content-Type: application/json' -d @- -s -w '\nDNS time:\t%{time_namelookup}\nTCP Connect time:\t%{time_connect}\nAppCon Protocol time:\t%{time_appconnect}\nRedirect time:\t%{time_redirect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' http://mytest.test.com
如果上述输出表明没有这样的问题,则必须在JMeter中花费时间。您应该使用诸如beanshell / JSR223等各种选项来调整JMeter实现。
答案 1 :(得分:1)
100个用户并不一定意味着每秒100个请求,甚至更多,这是不太可能的。
经过时间。 JMeter测量从发送请求之前到刚收到最后一个响应之后的经过时间。 JMeter不包括呈现响应所需的时间,JMeter也不处理任何客户端代码,例如Javascript。
粗略地说,如果JMeter能够在1秒内从服务器获得响应 - 您将获得100个请求/秒。如果响应时间为2秒 - 吞吐量将为50个请求/秒等,响应时间为4秒 - 25个请求/秒等等。
JMeter配置也很重要。如果你没有提供足够的循环,你可能会遇到某些线程已经完成而有些线程甚至没有启动的情况。有关详细说明,请参阅JMeter Test Results: Why the Actual Users Number is Lower than Expected文章。