Node.js Meteor节点进程CPU使用率接近100%
当我的Meteor应用程序的流量达到峰值时,我遇到了麻烦(峰值不算什么,1k访问量,可能一天2500次页面浏览量)。CPU使用率会急剧上升,而且永远不会恢复,因此我开始使用Nodetime来监视使用情况,并一直在重新加载进程(Node.js Meteor节点进程CPU使用率接近100%,node.js,meteor,Node.js,Meteor,当我的Meteor应用程序的流量达到峰值时,我遇到了麻烦(峰值不算什么,1k访问量,可能一天2500次页面浏览量)。CPU使用率会急剧上升,而且永远不会恢复,因此我开始使用Nodetime来监视使用情况,并一直在重新加载进程(永久重新启动),以使事情恢复正常 我对分析还比较陌生,所以找到根本原因让我不知所措。我相当确定这与我的应用程序的服务器代码有关,但分析似乎指出光纤模块是一个“热点”,我理解这有助于使我的服务器代码同步 下面是分析结果的一个片段。我希望有人能指导我在正确的方向上解决这个问题
永久重新启动
),以使事情恢复正常
我对分析还比较陌生,所以找到根本原因让我不知所措。我相当确定这与我的应用程序的服务器代码有关,但分析似乎指出光纤模块是一个“热点”,我理解这有助于使我的服务器代码同步
下面是分析结果的一个片段。我希望有人能指导我在正确的方向上解决这个问题
虽然我对你的问题没有具体的答案,但我有处理我们的meteor应用程序的CPU问题的经验,因此我可以给你一个调查事项列表
观察
和观察更改
。这些都非常昂贵,而且很容易被滥用。特别是:
- 当不再需要句柄时,请确保在句柄上调用
(请考虑使用类似这样的包,这样就可以为您完成此操作)stop()
- 仅获取绝对需要的集合和字段。通过不断扩散对象观察工作(需要大量CPU)。你拥有的对象越少,你需要计算的东西就越少
- 我们一有了它就迁移到了(meteor 0.7),这带来了很大的不同。请注意,为了访问oplog,您可能需要托管自己的db或在您选择的托管提供商上运行专用实例。我还建议添加程序包,以实际判断其是否有效
- 在
,在撰写本文时,大气版本(v0.1.5)尚未被修改以反映这些更改。如果您在生产中使用它,我强烈建议您检查HEAD版本并运行它发布与关系中发现内存泄漏
- 几周前我们停止了夜间重启。到目前为止一切都很好(祈求好运)
- 几个月前,我们切换到在服务器上使用弹性部署。它价格合理,性能非常好,而且它们甚至有一个可以告诉您如何启用oplog跟踪的工具
- 我强烈建议您签出以帮助诊断应用程序中的性能问题。也可以看看那些有很多好提示的网站
- 我也有这个问题。实际上有一个,我运行meteor--0.6.6版,cpu现在恢复正常了 回答得很好!特别要强调#4。Meteor core不久将有oplog跟踪,但同时SmartCollections似乎是一个不错的选择。不过,您需要访问oplog,因此您可能需要托管自己的mongodb。谢谢David,我完全可以看到我的发布/订阅设置可能是影响流量模式的因素。这是一个很好的起点。如果我在这个过程中发现了更具体的解决方案,我会向你汇报。@alanning谢谢!我很高兴看到oplog优化被集成到core中。不幸的是,对于我们这些没有自己的数据库的人来说,访问oplog似乎需要一个专门的mongohq或mongolab计划($)。@WesJohnson很高兴能提供帮助!:)我很想知道什么对你有用。回答得很好。我也遇到了这个问题。有趣的是,虽然这似乎是针对OS X的,所以我认为这不会影响生产中的任何人。@DavidWeldon我正在使用debian 7.1在virtualbox上运行meteor。我的应用程序还没有在生产中:(这是一个麻烦。在我的经验中,文件监视从来没有很好地通过节点核心API。我一直使用NPM模块,也许流星团队也应该考虑。LOL承诺实现是一个热点。