我使用带有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:运行4个集群的NodeJS。
结果:=============================
上线场景: 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==========================
我的节点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代码没有正确地编写来测量性能。
请帮帮忙。
发布于 2018-06-01 04:58:02
您的YML文件中有一个拼写错误,"target“必须是"http://localhost:3000”(没有尾随的'/')。
这就是为什么你会收到HTTP 404 (未找到)而不是HTTP 200 (OK)的原因
请按如下方式更新您的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,您的代码将会降级运行。这是因为你的代码基本上是单线程代码。
问候
发布于 2018-06-01 01:27:47
这是因为你的炮兵配置被设置为总共运行10秒。一旦10秒过去,炮兵脚本将退出,即使它尚未收到来自飞行请求的响应。
您的结果显示,所有请求都以404响应,这是炮兵在收到对飞行中请求的响应之前退出时的默认设置。
您的服务器代码没有问题,并且需要很长时间才能响应。在我的笔记本电脑上,大约是10秒。
发布于 2018-06-05 15:53:58
我得到了不同的响应时间。下面是我的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: 90https://stackoverflow.com/questions/50567206
复制相似问题