【发布时间】:2021-05-02 23:25:12
【问题描述】:
我对正在运行的节点进程所看到的内容有些困惑。主机上的docker stats 显示容器正在使用超过 100% 的 CPU。这让我认为节点进程正在最大化 CPU。当我在主机上运行top 并看到节点进程正在使用超过 100% 的 CPU 时,这一点得到了证实。
当我跳入 docker 容器时,我看到该节点只使用了 54% 的 CPU,并且处理在两个内核之间进行了拆分。因为 Node 是单线程的,所以我希望看到一个内核达到最大值,另一个内核为 0。
我找到了这个 QA,看起来操作系统可能正在内核之间移动进程(对我来说是个新闻)。 Is This Single Node.JS App Using Multiple Cores?
你能帮我解释一下结果吗?节点是否已被最大化?或者由于容器中的进程显示为 54% 的使用率可以上升到 100%?为什么节点容器中的顶部显示节点的使用率为 54%,但两个内核的使用率为 45% + 46%。除了单节点进程,容器中没有运行任何东西。我没有使用集群,尽管我包含的包可能是。
我问这一切是因为我试图了解我是否应该扩展这个 ECS 实例,或者节点是否可以处理更多。
Node.JS: 15.1.0
EC2 Instance: c5.large
NestJS: 7.3.1
【问题讨论】:
-
嗨,有趣,这可能有助于解释它stackoverflow.com/questions/47401648/…
-
请记住,nodejs 确实在内部使用线程进行某些操作(如磁盘和加密操作),因此它可以通过使用其他线程来涉及多个 CPU 内核。
-
如果它的使用率超过 100%,那么您有一个过载的进程,这表明您可能应该启动多个并使用负载均衡器。
-
@tadman,但它是否使用了超过 100% 的单核?
-
@IronMan,这个问题是关于 docker stats 不完全准确,但就我而言,docker stats 和 top 在主机上非常接近(均高于 100%)。