7

我们有这个带有 2 个节点进程的架构。

一个轮询私有 API 并将更改推送到第二个节点(如果有)。第二个节点处理数据并调用一堆其他 API 并最终通过 socket.io 向客户端(一个 HTML5 网站)发出一个更改事件

这第二个节点将始终处理数据,并且即使没有连接客户端也将始终发出更改。所以在我看来,CPU 或内存的使用并没有受到连接客户端数量的很大影响。另请注意,此架构仍在私有暂存环境中运行。

一切运行良好,我们已经准备好上线,直到我们注意到几天后,可能是一周后,第二个节点突然变得非常慢,而第一个节点仍然很好。

它变得如此糟糕,甚至两个节点之间的连接也会超时,并且它们通过 localhost 在同一个网络上。浏览到 socket.io/socket.io.js 文件也需要超过 10 秒。

我知道在没有看到任何代码的情况下很难理解这个问题,但我有点担心,因为我们必须在几天内上线,而且我的日志没有显示任何内容,谷歌也没有帮助。

什么是建设的好习惯你有没有经历过这样的事情?问题是什么,你是如何解决的?

什么是 node.js 的好监视器和分析器?(最好是免费的)

构建具有大量传出 API 调用的 node.js 应用程序有哪些好的做法?

任何可以帮助我解决甚至发现实际问题的正确方向的人将不胜感激!

谢谢!

4

2 回答 2

4

从未经历过这样的事情,但可能是第二个节点通过执行 CPU 密集型工作或同步等待某些资源来阻塞事件循环。

在您的代码中添加一些日志记录,以查看第二个节点处理第一个节点推送的每个更改所花费的时间。可能是某种类型的更改会消耗 CPU 10 秒左右才能完成。

您还应该开始监控内存、CPU 和网络连接。当事情变慢时,您的监控将提供一些关于瓶颈在哪里的线索。

对于监控,您可以尝试以下 3 个工具

  1. 节点时间
  2. 蜂鸟
  3. 节点监视器

另请阅读http://nodetime.com/blog/monitoring-nodejs-application-performance

于 2012-10-08T21:04:37.427 回答
1

听起来您在第二个节点的某处有内存泄漏,可能是由于调用了太多匿名函数等……您是否注意到您的 RAM 使用量在运行时略有上升?

于 2012-10-08T19:26:38.213 回答