【问题标题】:NodeJS + Express slowly consuming more and more CPUNodeJS + Express 慢慢消耗越来越多的 CPU
【发布时间】:2018-11-15 14:44:27
【问题描述】:

我们有一个奇怪的问题,我们在 NodeJS+Express 中有一个端点,这个端点每 x 分钟调用一次。 每次调用它时,我们都会在日志中看到 CPU 使用率略有增加。

随着时间的推移,CPU 使用率最终会达到 100% 并且变得无响应。

我觉得奇怪的是,我们真的没有在这个端点做任何时髦的事情。

我们获取大量 mongodb 文档,对它们进行迭代,进行一些处理,然后节省一些。就是这样。

使用上述任何工具/框架是否存在 CPU 可能泄漏的已知陷阱?

我在想我们是否配置了错误的东西,导致请求以某种方式永远存在。

我无法详细说明,因为我不知道这可能是什么原因。

【问题讨论】:

  • 内存使用情况如何?使用调试器单步执行路由......函数结束后它会去哪里?
  • MCVE??就像提交错误报告一样,诸如 “当我运行我的应用程序时发生这种情况” 之类的陈述根本没有上下文,本质上是一个没有根据的陈述,没有显示“重现”问题的必要步骤。您可以尝试这样做或寻找诸如可尾游标之类的东西,这些东西可能是消耗 CPU 的来源。但通常没有 MCVE,这里的人无法真正帮助您。
  • @Roger Johansson 我们面临着类似的问题。你们解决了什么问题?

标签: node.js mongodb express azure-application-insights


【解决方案1】:

听起来在下一份工作之前工作没有完成?从你的解释我看不出来。

不过我有几个建议:

为请求计时,如果它在 x 分钟左右始终失败,则将其设置为超时,至少这样它不会杀死其他进程,或者将此作业放在单独的线程上。

  1. 可能会转到批处理系统(在文档上有一个标志,查询它是否存在或为 false 并为结果集设置 $limit,然后在处理该文档后相应地设置标志)
  2. 你的记忆是什么样的?您是否可以使用投影来限制后端处理的数据。
  3. 如果您只更新几个文档,也许您应该重新访问查询。我宁愿用查询过滤结果集,然后引入一堆与 JS 过滤无关的文档。
  4. 代码中的内存管理 - 取消获取查询,使用完数组后将数组设置为空,等等。

【讨论】:

  • @roger - 你看我的建议了吗?
猜你喜欢
  • 2021-12-11
  • 2016-03-05
  • 2020-01-23
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2016-11-03
相关资源
最近更新 更多