Apache Benchmark - 并发和请求数

Swa*_*der 13 php apache concurrency performance node.js

基准文档说并发性是指同时完成的请求数量,而请求数量是请求总数.我想知道的是,如果我以20的并发级别发出100个请求,这是否意味着同时对20个请求进行5次测试,或者同时对20个请求进行100次测试?我假设第二个选项,因为下面引用的示例数字..

我在想,因为我经常在一些测试博客上看到这样的结果:

Complete requests: 1000000
Failed requests: 2617614
Run Code Online (Sandbox Code Playgroud)

这似乎难以置信,因为失败请求的数量高于总请求数.

编辑:显示上述数字的网站:http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against-apache-php

或者可能是它一直在努力,直到它达到一百万次成功?嗯...

bro*_*ofa 40

这意味着单个测试共有100个请求,始终保持20个请求打开.我认为你的误解是请求都需要相同的时间,实际上从来都不是这样.ab不是以20个批量发出请求,而是简单地从20个请求开始,并在每次现有请求完成时发出新请求.

例如,测试ab -n 10 -c 3将以3个并发请求开始:

[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

假设#2首先完成,ab用第四个替换它:

[1, 4, 3]
Run Code Online (Sandbox Code Playgroud)

......然后#1可能会完成,取而代之的是第五个:

[5, 4, 3]
Run Code Online (Sandbox Code Playgroud)

......然后#3结束:

[5, 4, 6]
Run Code Online (Sandbox Code Playgroud)

......等等,直到请求总共提出了10个请求.(当请求8,9和10完成时,并发性当然会逐渐减少到0).

合理?

至于你的问题,为什么你看到的结果有更多的失败而不是总要求...... 我不知道答案.我不能说我见过这个.你可以发布显示这个的链接或测试用例吗?

更新:在查看源代码时,ab会跟踪四种类型的错误,详细信息请参见"失败请求:..."行:

  • 连接 - (err_conn在源中)当ab无法设置HTTP连接时增加
  • 接收 - (err_recv在源中)当ab失败时增加读取连接失败
  • 长度 - (err_length在源中)当响应长度不同于收到的第一个良好响应的长度时增加.
  • 异常 - (err_except在源代码中)当轮询连接套接字时ab看到错误时增加(例如连接被服务器终止?)

关于何时发生以及如何计算它们(以及如何bad跟踪总计数)的逻辑必然有点复杂.看起来ab的当前版本应该只针对每个请求计算一次失败,但是该文章的作者可能正在使用以某种方式计算不止一个的先前版本?这是我最好的猜测.

如果您能够重现该行为,请务必提交错误.