【问题标题】:Artillery NodeJS Cluster Performance Benchmarking IssueArtillery NodeJS 集群性能基准测试问题
【发布时间】:2018-05-28 13:06:05
【问题描述】:

我正在使用带有 NodeJS 的 Artillery.IO 来衡量性能。 NodeJS 在我的本地主机上运行,​​我也在同一台机器上运行 Artillery。

当我使用这个脚本运行 Artillery 时。

{
  "config": {
      "target": "http://localhost:3000/",
      "phases": [
          {
             "duration": 10,
             "arrivalRate": 2
          }
      ]
  },
  "scenarios": [
    {
       "flow": [
           {"get": {"url": "/"}}
       ]
    }
  ]
} 

案例 1:NodeJS 在单个集群中运行。

结果: ===============================

推出的场景:20

场景完成:20

请求完成:20

发送的 RPS:2

请求延迟:

min: 1.1

max: 4.6

median: 1.2

p95: 3.3

p99: 4.6

场景计数:

0: 20 (100%)

代码:

404: 20

================================

案例 2:NodeJS 运行 4 个集群。

结果: ==============================

推出的场景:20

场景完成:20

请求完成:20

发送的 RPS:2

请求延迟:

min: 1.2

max: 4.7

median: 1.4

p95: 3.2

p99: 4.7

场景计数:

0: 20 (100%)

代码:

404: 20

===========================

我的 Node Server.js 代码是:

var http    = require('http');
var express = require('express');
var os = require('os');
var app     = express();
var server  = http.createServer(app);
var io = require('socket.io')(server);

app.get('/', function(req, res,next) {
    for(let i = 0; i < 10000000000; i++) {

    }
    console.log("Get Request received");
    res.send(new Date());
});

server.listen(3000, function() {
    console.log("Server is running in Port 3000");
});

我的问题是为什么我在集群模式下运行 NodeJS 时没有任何改进?

这是否与 NodeJS 和 Artillery 在同一系统上运行的事实有关,或者它是 server.js 代码未正确编写以衡量性能。

请帮忙。

【问题讨论】:

    标签: node.js artillery


    【解决方案1】:

    您的 YML 文件中有错字,“目标”必须是“http://localhost:3000”(没有结尾的“/”)。

    这就是您收到 HTTP 404(未找到)而不是 HTTP 200(正常)的原因

    请按如下方式更新您的 YML 并重新运行您的测试:

    {
      "config": {
          "target": "http://localhost:3000",
          "phases": [
              {
                 "duration": 10,
                 "arrivalRate": 2
              }
          ]
      },
      "scenarios": [
        {
           "flow": [
               {"get": {"url": "/"}}
           ]
        }
      ]
    }
    

    这里有我的结果:

    单集群

    All virtual users finished
    Summary report @ 20:26:36(+0000) 2018-05-31
      Scenarios launched:  20
      Scenarios completed: 6
      Requests completed:  6
      RPS sent: 0.15
      Request latency:
        min: 20756.8
        max: 115390.2
        median: 68364.2
        p95: 115390.2
        p99: 115390.2
      Scenario counts:
        0: 20 (100%)
      Codes:
        200: 6
      Errors:
        ESOCKETTIMEDOUT: 14
    

    #4 集群

    All virtual users finished
    Summary report @ 20:22:09(+0000) 2018-05-31
      Scenarios launched:  20
      Scenarios completed: 4
      Requests completed:  4
      RPS sent: 0.15
      Request latency:
        min: 81288.9
        max: 83085.9
        median: 82870.6
        p95: 83085.9
        p99: 83085.9
      Scenario counts:
        0: 20 (100%)
      Codes:
        200: 4
      Errors:
        ESOCKETTIMEDOUT: 16
    

    请注意,在这两种情况下,代码都是 200(OK)

    关于您的问题:

    我的问题是为什么我在集群模式下运行 NodeJS 没有任何改进?

    不是强制性的,除非您的代码将工作负载拆分为可以同时运行的多个部分,然后在最后组合可交付成果,否则您不会获得更快的结果。性能与 CPU 速度有关,吞吐量与 CPU 数量 + CPU 速度有关。 (它们是两个不同的主题)。

    这是否与 NodeJS 和 Artillery 在同一系统上运行有关?

    不,火炮没有影响。请看以下图片,唯一受 CPU 限制的进程是您的节点服务器代码 (arti.js)。

    单集群

    4 集群

    或者是 server.js 代码没有正确编写来衡量性能?

    没错,之前部分回答了。如果节点服务器的数量大于可用的 CPU 或 vCPU,您的代码将运行降级。这是因为你的代码基本上是单线程代码。

    问候

    【讨论】:

      【解决方案2】:

      这是因为您的火炮配置设置为总共运行 10 秒。 一旦 10 秒过去,炮兵脚本将退出,即使它尚未收到飞行请求的响应。

      您的结果显示所有请求都以 404 响应,这是火炮在接收飞行请求响应之前退出时的默认值。

      您的服务器代码没有问题,但需要很长时间才能如您预期的那样响应。在我的笔记本电脑上,大约是 10 秒。

      【讨论】:

        【解决方案3】:

        我得到不同的响应时间。下面是我的 yml 代码。

        config:
          target: "http://localhost:3000"
          phases:
            - duration: 10
              arrivalRate: 10
        scenarios:
          - flow:
            - get:
                url: "/" 
        

        响应时间

        案例 1

        报告@12:29:38(+0530) 2018-06-05

        Scenarios launched:  0
          Scenarios completed: 1
          Requests completed:  1
          RPS sent: NaN
          Request latency:
            min: 110658.5
            max: 110658.5
            median: 110658.5
            p95: 110658.5
            p99: 110658.5
          Codes:
            200: 1
        

        案例 2

        所有虚拟用户已完成 总结报告@12:29:48(+0530) 2018-06-05

        Scenarios launched:  100
          Scenarios completed: 10
          Requests completed:  10
          RPS sent: 0.77
          Request latency:
            min: 11300.8
            max: 110658.5
            median: 60775.7
            p95: 110658.5
            p99: 110658.5
          Scenario counts:
            0: 100 (100%)
          Codes:
            200: 10
          Errors:
            ESOCKETTIMEDOUT: 90
        

        【讨论】:

          猜你喜欢
          • 2021-06-29
          • 1970-01-01
          • 2020-06-26
          • 1970-01-01
          • 2017-05-29
          • 2014-07-30
          • 1970-01-01
          • 2014-12-19
          • 2020-09-27
          相关资源
          最近更新 更多