【问题标题】:NodeJS app's CPU usage percentage goes to 100% for all requests对于所有请求,NodeJS 应用程序的 CPU 使用率达到 100%
【发布时间】:2017-10-11 14:07:28
【问题描述】:

我有一个基于 Express 构建的 NodeJS 应用程序。我使用 pm2 来保持应用程序运行。有时,应用程序挂起,即页面只是继续加载。如果我尝试使用 SSH 连接到服务器,那么它也会挂起并且不显示任何提示或任何内容。一段时间后(大约 1-2 分钟),应用程序开始正常运行,我也可以在终端中使用 SSH 连接到服务器。

为了查看是否是因为 CPU 使用率飙升,我将我的 pm2 进程与 keymetrics.io 连接起来。在这里,我注意到在每个请求上(即使是简单的登录页面),CPU 使用率图表都会达到 100%,然后恢复正常。

它不会挂起应用程序,但我很困惑这是否是正常行为,如果不是,那么可能是什么原因造成的?从用户的角度来看,该应用程序通常不会很慢。

【问题讨论】:

  • 我真的不明白没有人看你的代码怎么知道这是否正常。
  • @jfriend00 我的意思是,如果每个人都发生这种情况(即在 nodejs 应用程序监控方面更有经验等),每个请求都会使 CPU 图表瞬间达到 100%。
  • @MohitBhardwaj 您应该进一步调查,无论 JavaScript 是否正在运行,服务器锁定 1-2 分钟是不正常的。某些东西阻塞了所有内核并冻结了您的系统
  • @RomanMik 服务器被锁定的情况很少发生,例如大约两周一次。但是每个请求的 CPU 使用率都会达到 100%,所以这是我的主要问题。 jfriend00 在下面给出了解释,这对我目前的情况很有意义。

标签: node.js express pm2


【解决方案1】:

嗯,是的,这很正常。在任何 Javascript 运行的确切时间,CPU 被 100% 占用。这是正常和预期的。在任何给定时刻,CPU 要么 100% 运行,要么根本不运行。中间没有。当您看到 50% 时,这只是某个时间段内的移动平均线,其中一半时间为 100%,一半时间为 0%。因此,实际问题是 CPU 处于 100% 状态需要多长时间。如果是几毫秒,那没什么。如果是几分钟,那很可能是个问题。

大多数监控工具会随着时间的推移向您显示更多的移动平均线,因此您不会看到 100% 的瞬时爆发,但如果您的监控工具向您显示 100% 的瞬时爆发,那是完全正常的。那是实际 Javascript 正在运行的时刻。

如果您在一段有意义的时间(例如几分钟)内看到您的 CPU 处于 100%,那么这可能表明存在需要调查的问题,因为在此期间您的服务器可能没有响应其他请求。但是,短暂的峰值达到 100% 是正常的。

【讨论】:

  • 非常感谢。这正是我想知道的。一位同事告诉我,那里的应用程序从未达到高于 50% 的 CPU 使用率。所以我认为他们会使用你提到的不同的监控工具,它会随着时间的推移显示平均值。也可能是因为服务器是多核的,而我的是单核的?
  • @MohitBhardwaj - node.js 在一个内核中运行你所有的 Javascript,因此拥有多个内核通常不会有太大的不同。但是,这又取决于监控工具及其显示方式。如果您有一个 4 核 CPU 并且一个 CPU 100% 被占用,那么监控工具可能会显示 25% 的总体使用率,因为您还有其他三个核心什么也不做。 node.js 的主要问题是您不想编写长时间占用 CPU 的 node.js 代码,因为这可能会降低服务器的响应速度。但 100% 的短暂爆发是正常的。
  • 再次感谢 :) 我真的很困惑,你的解释很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
相关资源
最近更新 更多