Apache Benchmark-实际并发级别-问题

时间:2018-07-22 05:35:55

标签: node.js apache performance request benchmarking

最近,我已经创建了简单的node.js脚本来验证某些持久数据库操作的并发性。的基本思想是接收Web请求,然后等待大约10秒钟并返回结果(下面的代码)。

/*jshint esversion: 6 */
const express = require('express');
const app = express();

var counter = 0;

app.get('/test', (req, res) => {
    counter++;
    console.log(counter);

    // simulate long db query
    setTimeout(() => {
         res.send();
    }, 10000);
});

app.listen(80, () => console.log('Example app listening on port 80!'));

Apache Benchmar工具用于启动初始测试-通过执行具有以下参数的命令:

ab -c 20 -n 200 -v 3 http://localhost/test.

问题是,显示的脚本仅显示一个!由Apache Benchmark发送的连接。

经过更深入的研究,我观察到Apache Bechmark发送的第一个请求似乎是一种服务状态检查器,并且不会同时执行。首次请求后启用请求并发。为了说明这一点,我准备了经过稍微修改的代码版本,该代码只对第一个请求立即做出响应。

app.get('/test', (req, res) => {
    counter++;
    console.log(counter);

    if (counter == 1) {
        res.send();
        return;
    }
    // simulate long db query
    setTimeout(() => {
        res.send();
    }, 10000);
});

修改后的版本显示apache基准并发级别符合预期。当然,这种测试方法会适得其反,您知道如何禁用这种Apache Benchmark的意外行为吗?

0 个答案:

没有答案