在 docker 容器内运行时,Node.js 集群模块无法使用所有 cpu 内核

标签 node.js docker

当在我的物理机器上运行 Node.js 集群模块时,os.cpus().length 将得到 4,但是之后将应用程序放入 docker 容器中,然后它返回 2!

我通常知道这是因为默认情况下 Golang 只会在一个单核上运行,这就是为什么这里的集群模块只能看到一个单 CPU 核(2 个逻辑核)。

如果我希望我的集群模块利用所有物理 CPU 核心,实现该目标的正确方法是什么?

我尝试使用 --cpuset-cpus=0-1 选项,直到现在还没有弄清楚。

我在想,如果我只是创建一个任意数量的worker,那真的可以利用所有的CPU核心吗? os.cpus().length 这里只是用来计算机器有多少个 cpu 核心,我可以通过调用 shell 脚本来解决这个问题。这意味着这个问题可以简单地等同于 Node.js os.cpus() API is not compatible with docker?是真的吗?

最佳答案

您的 docker 机器使用默认的 2 核。在 Mac 上,您可以提前更改数量。 enter image description here

关于在 docker 容器内运行时,Node.js 集群模块无法使用所有 cpu 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44747596/

相关文章:

node.js - crypto.decipher 导致流在 Node js 中无法关闭

javascript - 将文件路径作为参数传递到 Angular 路由器中

javascript - 在 MongoDB 中,为什么搜索不存在的电子邮件会使我的整个应用程序崩溃

docker - 无法加载动态库 'libcuda.so.1'; dlerror : libcuda. so.1:无法打开共享对象文件:没有这样的文件或目录

mysql - 在 MySQL Docker 容器中包含数据

docker - yum install无法从Dockerfile运行

node.js - ExpressJS 3.2 有时会呈现空白页面

node.js - 找不到 dezalgo 文件并且无法运行 gulp-sass

docker - 实际上,docker run -dit(-itd) 与 docker run -d 有什么区别?

mysql - Docker-Compose - 无法使用命令 --init-file 初始化 MySQL 数据库