一个 Node.js 集群可以在 64 位 Wintel PC 上生成多少个子进程?

2024-04-24

我正在运行并发测试,为了简洁起见,为每个欺骗的 http 请求定义了一个进程。对于最多 64 个请求/进程,它工作得很好,但在 65 个请求/进程上就折叠起来了。我在一台 I5 笔记本电脑上运行 Window 7(64 位),具有 4GB RAM。

在运行测试时,我打开了 Chrome(带有几个选项卡),我预计操作系统的通用系统进程也会产生一些影响,但我对最低级别的 Node.js 知之甚少,无法理解在哪里问题出在。

例如,一篇文章表明可以在 2GB 64 位 Windows XP 系统上运行超过 8000 个进程:

http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

但我遇到的 64 个子进程的数字相当引人注目。

有任何想法吗?


Node是异步的,没有阻塞,只由当前脚本执行,它可以完美地处理多个连接,所以这意味着在高并发情况下,它会使用你所有的CPU,但每个进程只能使用一个核心,因为Node是没有螺纹。因此,从技术上讲,建议拥有与核心一样多的进程,每个进程一个核心。在这种情况下,在高并发情况下,节点集群将使用所有 CPU。如果超出这个范围,就会浪费 RAM 并在操作系统调度程序上投入额外的工作。除此之外,每个 Nodejs 进程都有一个启动时间。所以在运行时创建一个nodejs进程是非常昂贵的。

来自 Node.JS 文档:

这些子节点仍然是 V8 的全新实例。假设至少 每个新节点的启动时间为 30 毫秒,内存为 10 MB。也就是说,你不能 创造成千上万个。

结论最好的办法是根据 CPU 核心的数量进行分叉,即:

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', function(worker) {
    console.log('worker ' + worker.process.pid + ' died');
    cluster.fork();
  });
} else {
  // Worker processes have a http server.
  http.Server(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
  }).listen(8000);
}

我们实际上有一个生产服务器来执行此操作,它可能需要大约 1000 个并发,并且为 hello world 提供不到 10 毫秒的延迟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个 Node.js 集群可以在 64 位 Wintel PC 上生成多少个子进程? 的相关文章

  • 为什么我无法访问多个网络调用的结果?

    在我的 Node 应用程序中 我试图获取包裹的运输数据 我需要一种方法来获取 json 数据并将其附加到对象或其他东西 以便我可以将其传递到我的渲染页面 使用 pug 这是我的代码 var test for var i 0 i lt res
  • 无法以管理员身份更改 Windows 10 中的系统变量路径

    我正在 Windows 10 计算机中安装 Java JDK 需要通过在 Windows 设置中编辑系统变量来注册其路径 但我以管理员和普通用户身份尝试过 但它不允许我添加路径 甚至复制粘贴或仅添加任何角色 在 Win 8 中执行此操作没有
  • 保存 Mongoose 文档时出现版本错误

    我有一个问题 不确定我是否做错了什么或者这是一个错误 我有一些产品 每一种都有一系列的变体 我想浏览一些数据并以这些变体加载它 但我遇到了许多 版本错误 找不到匹配的文档 错误 认为我遇到了竞争条件 我为我修改的每个变体依次保存相同的文档
  • 如何在 Windows 中将 Electron 应用程序部署为可执行文件或可安装文件?

    我想生成一个独特的 exe文件来执行应用程序或 msi安装应用程序 怎么做 您可以使用以下方式打包您的程序电子包装机 https github com maxogden electron packager然后使用以下命令构建单个安装 EXE
  • 在 Dockerfile 中安装节点?

    我是AWS elastic beanstalk的用户 我遇到了一些问题 我想用 less node 构建我的 CSS 文件 但我不知道在使用 jenkins 构建时如何在 dockerfile 中安装节点 这是我在 docker 中使用的安
  • Windows 通用应用程序串行端口无法打开,SerialDevice.FromIdAsync 始终为 null

    我正在尝试在 Windows 通用应用程序中使用串行端口 我一直在使用微软的串行示例应用程序作为模板 但是我遇到了一个相当奇怪的问题 var dis await DeviceInformation FindAllAsync SerialDe
  • 有没有办法从 Windows 7 上的 Windows 服务启动 GUI 应用程序?

    我做了很多搜索 寻找一种从 Windows 7 上的 Windows 服务启动 GUI 应用程序的方法 我发现的大部分内容是 Windows 7 服务现在在单独的用户会话中运行 并且无法显示任何图形界面给当前用户 我想知道是否有任何解决方法
  • 在打字稿中读取和写入文本文件

    我应该如何从 Node js 中的 TypeScript 读取和写入文本文件 我不确定是否会在 node js 中读 写沙箱文件 如果没有 我相信应该有一种访问文件系统的方法 相信应该有一种访问文件系统的方法 Include node d
  • 有 64 位 Ruby 吗?

    似乎人们正在为 64 位平台编译 MRI Ruby 1 8 7 我已经搜索和阅读了一段时间 但没有真正得到我想要的答案 我想知道的是 你们中是否有人真的在 Ruby 中使用了超过 4GB 的内存 如果这样编译 Ruby 真的是 64 位吗
  • Eslint:警告文件默认被忽略。使用否定忽略模式

    我是 Eslint 的新手 到目前为止 我已经在本地项目中安装了 Eslint 并进行了配置 eslintrc js 文件包含 module exports env node true commonjs true es6 true moch
  • 将数据传递给视图时,node ejs 引用错误数据未在 eval 处定义

    我已经接近使用express和ejs的节点应用程序 但是当我尝试将数据从控制器传递到我的视图时 如下所示 var myData theData data res render path join dirname views index my
  • 如何提高 MongoDB 中 update() 和 save() 的性能?

    我正在寻找有关如何在以下情况下提高数据库性能的提示 作为示例应用程序 我今天编写了一个相当简单的应用程序 它使用 Twitter 流 API 来搜索某些关键字 然后将结果存储在 MongoDB 中 该应用程序是用 Node js 编写的 我
  • Webpack 5 和 ESM

    我想我已经阅读了 SO 上的每个线程以及互联网上的每个相关页面 所有内容都有一些问题的变体 I want 使用 webpack 捆绑我的 Web 应用程序 在我的源 js 中使用 ES 模块并将它们转译为更广泛的浏览器支持 在我的 webp
  • 如何在 Express 4.0 中发送 Flash 消息?

    因此 我的 Web 应用程序需要身份验证 并且我有一个注册页面 如果用户尝试使用数据库中已有的电子邮件进行注册 我想向他们显示一条错误消息 我正在尝试在 html 端使用此代码来执行此操作 div class alert alert dan
  • Node.js + Firebase orderByChild 不起作用

    我试图弄清楚这个嵌套顺序 但我所做的一切都不起作用 这是我试图订购的数据结构的示例 KV Lrm 93Agm8kAuXql body Acceleration 0 0 Altitude 11 Battery 12 7 Date 2016 0
  • 如何安装适用于 Windows C++ 的最新版本 OpenGL?

    我正在使用 Visual Studio 2010 运行 Windows 7 包含的 OpenGL 版本 include 是版本 1 1 我希望使用合理的当前版本 某种版本 3 或 4 我需要做什么才能达到该状态 OpenGL SDK 页面位
  • 在 Heroku 应用程序中同时运行 Django 和 Node

    我想在我的 heroku 实例上同时运行 django 应用程序和节点应用程序 这是我的进程文件 web python manage py runserver 0 0 0 0 PORT web node bin node modules a
  • 在 Python 3.5 64 位上通过 pip 安装 OpenCV

    我尝试安装 OpenCV 但找不到任何合适的 pip 软件包 我决定上网查找有关如何安装它的官方文档 并发现this https opencv python tutroals readthedocs io en latest py tuto
  • Socket.io 不断重复连接并忽略其他事件

    我正在尝试制作一个网络应用程序 用户可以在其中互相玩环形国际象棋 这是我的 app js 在服务器上 var express require express var app express var http require http Ser
  • Mongoose MongoDB:更新嵌套数组中的对象

    我有以下架构 var UserSchema new Schema emp no Number skills skill type Schema Types ObjectId ref Skill startDate type Date 然后我

随机推荐