meteor节点进程CPU使用率接近100%

当stream量达到峰值时,我的Meteor应用程序出现问题(峰值为1毫秒,一天访问量为2500次)。 CPU使用率高峰,并永远不会恢复,所以我已经采取使用节点时间来监视使用情况,我已经重新加载进程( forever restart ),让事情恢复正常。

我对分析很新,所以find根本的原因让我不知所措。 我相当肯定它与我的应用程序的服务器代码有关,但分析似乎指向光纤模块作为一个“热点”,我知道帮助我的服务器代码同步。

以下是剖析结果的摘录。 希望有人能指导我在正确的方向排除故障!

在这里输入图像描述

虽然我没有针对您的问题的具体答案,但我有经验处理我们的生产meteor应用程序的CPU问题,所以我可以给你一个事情调查清单。

  1. 升级到最新版本的meteor和相应的节点版本(请参阅更新日志 )。 截至本文写作meteor0.8.2和节点0.10.28。

  2. 阅读本文和这篇文章。 后者非常重要,你应该总是试图延迟激活订阅,直到你需要它们。 尤其是,您可能不需要为未login的用户发布任何内容。根据我的经验,meteorCPU问题与订阅有关。

  3. 注意observeobserve observeChanges 。 这些是昂贵的 ,容易被滥用。 尤其是:

    • 确保在不再需要的时候在句柄上调用stop() (考虑使用像publish-with-relationship这样的包,这样做对你来说是完成的)。
    • 只抓取您绝对需要的集合和字段。 通过不断区分对象来观察工作(需要大量的CPU)。 你拥有越来越小的物体,计算的就越less。
  4. 考虑在退休之前使用智能集合 。 使用oplog拖尾 – 这可以使你的应用程序在性能和CPU使用率方面出现日夜差异。

  5. 考虑让一些事情没有反应(也在上面的文章中提到)。 对我们来说这是一个巨大的胜利。 我们有一个非常昂贵的连接,在网站上的两个经常访问的页面上使用。 当到了每隔30分钟CPU达到100%的时候,我放弃了对这个元素的react native,只是在服务器上进行了连接,然后通过方法调用把数据传送给了客户端。 我还为这些结果创build了服务器端到期的caching,并由用户存储(特别感谢Matt DeBergalis对此build议)。

  6. 做一个预防性的夜间重新启动。 我有一个cron的工作,告诉forever重新启动我们的应用程序在半夜一天一次。 这将CPU从10%降至1%。 这似乎是黑魔法,但事实上,重置后的CPU使用率变化使我相信这是一个好主意。

更新的想法(1/13/14)

  • 我们尽快迁移到oplog拖尾 (meteor0.7),这是一个很大的区别。 请注意,为了访问oplog,您可能需要托pipe自己的数据库或在您select的托pipe提供商上运行专用实例。 我还build议添加facts包,以实际上告诉它的工作。

  • publish-with-relations发现了一个内存泄漏,截至本文撰写时,大气版本(v0.1.5)并没有碰到这些变化。 如果您在生产中使用它,我强烈build议检查HEAD版本并在本地运行。

  • 几个星期前我们停止了夜间重新开始。 到目前为止,一切都很好(双手交叉)。

更新的想法(7/2/14)

  • 几个月前,我们转而在mongohq上使用弹性部署。 这是很实惠的,性能很好,甚至有一个博客文章 ,告诉你如何启用oplog拖尾。

  • 我强烈build议您查看kadira以帮助诊断应用中的性能问题。 还可以看看这些有很多好的提示的学院文章 。

我也有这个问题。 其实0.6.6.1有一个问题 ,我运行meteor --release 0.6.6 ,CPU现在恢复正常了。