我们正在使用 Express 3 运行 Node Socket.io 服务器。该服务器使用Forever进行监控。服务运行良好,但 CPU 整天都在增长,直到达到 90%+,然后突然回落到 ~20%,如下图所示。我相信下降是由永远重启应用程序引起的。
我想知道的是;
- 可能导致 Node.js 应用程序出现这种行为的典型因素是什么?
- 有哪些工具/方法可用于调试节点应用程序中的内存泄漏/CPU 占用?
我认为这可能与 Socket.io 在用户断开连接后不清理资源有关,尽管文档说 Socket.io 会自动管理这个。
任何帮助将不胜感激,这个问题使管理我们的服务器变得非常困难。我一周前在Serverfault上发布了这个问题,但没有收到回复,所以我认为这里可能会更好。
更新:经过更多研究,CPU 似乎与连接数没有直接关系。我们的临界质量似乎约为 1500 个并发连接,如下所示:
- xhr 轮询:767
- 网络套接字:692
- jsonppolling:80
有时我们可以在只有 500 个连接的情况下达到 100% 的 CPU,而其他时候只有 1500 个连接。我知道发送消息的速度有很大的影响,但是速度是相当一致的。