12

我们正在使用 Express 3 运行 Node Socket.io 服务器。该服务器使用Forever进行监控。服务运行良好,但 CPU 整天都在增长,直到达到 90%+,然后突然回落到 ~20%,如下图所示。我相信下降是由永远重启应用程序引起的。

CPU 行为

我想知道的是;

  • 可能导致 Node.js 应用程序出现这种行为的典型因素是什么?
  • 有哪些工具/方法可用于调试节点应用程序中的内存泄漏/CPU 占用?

我认为这可能与 Socket.io 在用户断开连接后不清理资源有关,尽管文档说 Socket.io 会自动管理这个。

任何帮助将不胜感激,这个问题使管理我们的服务器变得非常困难。我一周前在Serverfault上发布了这个问题,但没有收到回复,所以我认为这里可能会更好。

更新:经过更多研究,CPU 似乎与连接数没有直接关系。我们的临界质量似乎约为 1500 个并发连接,如下所示:

  • xhr 轮询:767
  • 网络套接字:692
  • jsonppolling:80

有时我们可以在只有 500 个连接的情况下达到 100% 的 CPU,而其他时候只有 1500 个连接。我知道发送消息的速度有很大的影响,但是速度是相当一致的。

4

1 回答 1

2

我没有那么有经验,但您的 CPU 延迟的主要原因可能是:

  1. 代码执行时间:如果您有多个循环,请考虑为它们提供更少的数据来提取/提取。
  2. 并发连接:我也遇到了这个问题,一个人可以打开 3-4 个浏览器选项卡/窗口,因此请尝试为每个用户 NB 建立 1 个并发连接。你可以使用会话

如果我有什么想法,我会尝试编辑这个答案,你可以看到下面的链接,了解 Nodejs 上的服务器压力测试。

链接在这里

希望它可以帮助你。

于 2013-05-14T07:34:06.463 回答