部署Node.js Web应用程序时要查看哪些最重要的统计信息?

时间:2012-11-07 01:37:51

标签: node.js monitoring analytics v8 joyent

首先 - 关于我的背景:我已经编程了一段时间(此时为10年),并且在编写想法时非常称职。我在一年多前开始从事网络应用程序编程工作,幸好发现了nodeJS,它使网络应用程序的创建感觉更像传统的编程。现在,我有一个node.js应用程序,我已经开发了一段时间,现在正在网络上生产。 我的主要困惑源于这样一个事实:我对网络开发的世界都很陌生,并且在监控我的应用程序时并不知道什么是重要的,什么不重要。

我正在使用Joyent SmartMachine,看看他们提供的分析选项有点压倒性。有很多不同的选项和配置,我不知道每个分析真正起作用的目的。对于下面的问题,我会感谢任何答案,无论是针对Joyent的云分析还是完全一般的。


问题一

现在,我主要关心的是弄清楚我的应用程序如何使用我运行它的服务器。我想知道我的应用程序是否分配了适当数量的资源。它收到的请求数量是否会使服务器过度使用,还是需要额外的资源?为此目的,为NodeJS应用程序查看哪些分析非常重要? (如果有所不同,可以在单独的服务器上使用MongoDB和Redis)


问题二

在管理正在生产的服务器时,还有哪些其他统计数据通常非常重要?我习惯于运行一次以执行特定操作的程序(例如,一旦计算完图像就完成运行的光线跟踪器),而不是连续运行并与许多客户端交互的web应用程序。我确信有很多事情对长期服务器管理员来说是显而易见的,而不是像我这样的新手。


问题三

具体处理NodeJS时需要注意什么?在处理NodeJS的单线程事件循环与更标准的服务器系统时,哪些统计/分析变得特别重要?

我还有其他关于数据库如何影响等式的问题,但我认为这已经足够了......

3 个答案:

答案 0 :(得分:15)

我们一直在运行node.js近一年,从0.4和现在的0.8系列开始。 Web应用程序是基于mongo,redis和memcached的表达式2和3。

很少有事实。

  • 节点无法处理大型v8堆,当它增长超过200mb时,您将开始看到增加的CPU使用量
  • 节点似乎总是泄漏内存,或者至少在不实际使用它的情况下增大堆大小。我怀疑内存碎片,因为v8 profiling或valgrind在js空间中没有泄漏,也没有驻留堆。早期0.8在这方面很糟糕,rss可能是1GB,50MB堆。
  • 挂起请求很难跟踪。我们编写了中间件来监控这些,特别是因为我们的应用程序是基于长轮询的

我的建议。

  • 每台机器使用多个实例,每个CPU至少使用1个实例。与haproxy,nginx等具有会话亲和力的平衡
  • 编写midleware以报告挂起的连接,即代码从未响应或延迟超过阈值的连接
  • 经常重启实例,至少每周一次
  • 编写轮询器,每分钟打印出一个带有进程模块的内存统计信息
  • 使用supervisord和fabric进行简单的流程管理

监控cpu,报告内存统计信息并重新启动阈值

答案 1 :(得分:6)

无论哪种类型的Web应用程序,NodeJS或其他类型,负载测试都将回答您的应用程序是否具有适当数量的服务器资源。我最近发现的一个很好的网站是Load Impact

要回答的真正问题是,随着并发用户数量的增加,加载时间何时开始增加?当您到达一定数量的并发用户时达到临界点,之后服务器性能将开始降低。因此,请根据您希望在不久的将来访问您网站的用户数进行负载测试。

您如何估算出您期望的用户数量?

在您的网页上安装Google Analytics或其他分析包是必须!通过这种方式,您可以查看每月有多少用户访问您的网站,以及每月访问次数的增长情况,这有助于预测未来的预期访问次数,从而预测服务器的预期负载。

即使我知道用户数量,我如何估算实际负载?

答案在所有浏览器中提供的F12开发工具中。在任何浏览器中打开您的网站并按F12(或Opera Ctrl + Shift + I),这将打开浏览器的开发工具。在Firefox上确保安装了Firebug,在Chrome和Internet Explorer上它应该是开箱即用的。转到网络网络标签,然后刷新您的页面。这将显示HTTP请求的数量,每页加载的带宽使用量!

因此,计算每日服务器负载的公式很简单:

每页加载的HTTP请求数X每个用户每天加载的平均页数X预期的并发用户数=每天服务器的HTTP请求总数

和...

每页传输的MB传输数量X每个用户每天的平均加载数量X预期的并发用户数=每天所需的总带宽数

我总是发现每天计算这些数字更容易,然后将其推断为数周和数月。

答案 2 :(得分:3)

Node.js是单线程的,所以你一定要为你的机器拥有的每个cpu启动一个进程。到目前为止,Cluster是实现这一目标的最佳方式,还有一个额外的好处,就是能够重新启动死亡工人并发现无反应的工人。

您还需要进行负载测试,直到您的请求开始超时或超出您认为合理的响应时间。这将使您了解服务器可以处理的上限。 Blitz是要查看的众多选项之一。

我从未使用过Joyent的统计信息,但NodeFly及其node-nodefly-gcinfo是监控节点进程的绝佳工具。

相关问题