Node.js 进程在 AWS Fargate 中的行为如何?

问题描述 投票:0回答:2

我在 AWS Fargate 上部署了一个节点应用程序,采用 1 vCPU/2GB 内存任务配置。我一直想知道 Node.js 在此设置上运行时与可用 vCPU 的关系。

根据 AWS 文档,vCPU 只是 intel Xeon CPU 核心上的超线程:Fargate 中的 vCPU 真正意味着什么?。那么,如果整个程序仅在一个本身已经是超线程的 vCPU 上运行,那么 libuv 如何运行线程池(默认情况下运行 4 个线程)呢?另外,Node 程序在具有 0.256 vCPU 的较低配置上运行的配置上的行为如何?

此外,Fargate 通过运行配置中指定的任务数量来自动处理扩展;但是,如果我决定使用 PM2 之类的东西在每个任务中运行多个 Node 进程,会发生什么?由于我在 1 个 vCPU 上运行,这真的不起作用吗?

javascript node.js cpu autoscaling aws-fargate
2个回答
1
投票

与线程始终运行相同:在单个 CPU 上。

线程(软件)是在多核机器流行之前发明的。所有最初的多线程 Unix 机器,如 Sun、HP9000、Digital VAX 和 Alphas 以及 Silicon Graphics IRIS 都是单 CPU 机器,只有一个内核,没有超线程。

线程(软件)的工作方式当时和现在是一样的:线程轮流在 CPU 上执行。这是由操作系统使用 CPU 的硬件功能进行调度的:定时器中断。

操作系统会设置一个定时器来触发中断,然后将CPU交给线程。当计时器到期时,它将中断 CPU,导致 CPU 停止执行线程中的代码,转而执行操作系统中的代码。正是在这个中断期间,操作系统决定接下来要执行哪个线程,并再次设置定时器中断。与多核 CPU 的唯一区别是操作系统有更多的 CPU 核心来调度线程。与超线程的唯一区别是操作系统可以为每个 CPU 核心调度两个线程。

这就是为什么在典型的家庭用户桌面 Linux 机器(甚至不是服务器)上通常运行大约 300 个线程,即使它物理上只有 4 个内核,只能同时运行 8 个线程。


-1
投票

我也想知道,将发送带有系统资源的日志来看看会发生什么,因为理论上,如果您不使用线程工作人员或子进程,nodejs 只使用一个核心,但 Fargate 似乎有点不同

© www.soinside.com 2019 - 2024. All rights reserved.