在所有 CPU 内核上运行 NodeJS 以实现最大的硬件潜力

问题描述

硬件:

我在具有 4 核 cpu 和 6GB RAM 的 VMware Workstation 上运行 Ubuntu 20.04 虚拟机

问题:

我一直在寻找如何提升我的 NodeJS 服务器,其中一个解决方案是利用我现在正在做的处理器的所有 cpu 内核。

这是我名为 server.js 的入口文件

const express = require("express");

const app = express();

app.use("/",async (res,req) => {
  req.status(200).send('success');
});

app.listen(4300);

pm2 的帮助下,我产生了最大数量的集群 pm2 start server.js -i max 并且我正在实现此日志:

enter image description here

autocannon 的帮助下,我将此服务器定位为“DDoS”类型,以监控处理多个并发请求的效果

代码如下:

const cannon = require('autocannon')

const localHost = 'http://localhost:4300'

async function startMockUp() {
    let result = await cannon({
      url: localHost,// target url
      connections: 10000,pipelining: 1,duration: 10 // seconds
    })

    console.log('request',result.requests)
}

startMockUp()

这是第一次运行的输出

enter image description here

现在我正在尝试做同样的事情,但只运行一个集群:

enter image description here

得到这个结果:

enter image description here

如您所见,除了单个集群能够处理更多请求之外,我并没有实现运行 4 个并发集群的 x4 加速。

为什么会这样?

我做错了吗?

是否有解决方法来获得更好的结果?

解决方法

考虑使用 cluster to fork off the processes。这是在一台机器上使用多个节点实例的标准方法。我的想法是,按照您启动流程的方式,只有一个实例实际处理请求。