首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >炮兵NodeJS集群性能基准问题

炮兵NodeJS集群性能基准问题
EN

Stack Overflow用户
提问于 2018-05-28 21:06:06
回答 3查看 1K关注 0票数 2

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

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

代码语言:javascript
复制
{
  "config": {
      "target": "http://localhost:3000/",
      "phases": [
          {
             "duration": 10,
             "arrivalRate": 2
          }
      ]
  },
  "scenarios": [
    {
       "flow": [
           {"get": {"url": "/"}}
       ]
    }
  ]
} 

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

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

上线场景: 20个

已完成的场景: 20

已完成请求数: 20

发送的RPS :2

请求延迟:

代码语言:javascript
复制
min: 1.1

max: 4.6

median: 1.2

p95: 3.3

p99: 4.6

场景计数:

代码语言:javascript
复制
0: 20 (100%)

代码:

代码语言:javascript
复制
404: 20

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

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

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

上线场景: 20个

已完成的场景: 20

已完成请求数: 20

发送的RPS :2

请求延迟:

代码语言:javascript
复制
min: 1.2

max: 4.7

median: 1.4

p95: 3.2

p99: 4.7

场景计数:

代码语言:javascript
复制
0: 20 (100%)

代码:

代码语言:javascript
复制
404: 20

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

我的节点Server.js代码是:

代码语言:javascript
复制
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代码没有正确地编写来测量性能。

请帮帮忙。

EN

回答 3

Stack Overflow用户

发布于 2018-06-01 04:58:02

您的YML文件中有一个拼写错误,"target“必须是"http://localhost:3000”(没有尾随的'/')。

这就是为什么你会收到HTTP 404 (未找到)而不是HTTP 200 (OK)的原因

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

代码语言:javascript
复制
{
  "config": {
      "target": "http://localhost:3000",
      "phases": [
          {
             "duration": 10,
             "arrivalRate": 2
          }
      ]
  },
  "scenarios": [
    {
       "flow": [
           {"get": {"url": "/"}}
       ]
    }
  ]
}

下面是我的结果:

单群集

代码语言:javascript
复制
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群集

代码语言:javascript
复制
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,您的代码将会降级运行。这是因为你的代码基本上是单线程代码。

问候

票数 1
EN

Stack Overflow用户

发布于 2018-06-01 01:27:47

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

您的结果显示,所有请求都以404响应,这是炮兵在收到对飞行中请求的响应之前退出时的默认设置。

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

票数 0
EN

Stack Overflow用户

发布于 2018-06-05 15:53:58

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

代码语言:javascript
复制
config:
  target: "http://localhost:3000"
  phases:
    - duration: 10
      arrivalRate: 10
scenarios:
  - flow:
    - get:
        url: "/" 

响应时间

案例1

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50567206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档