Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Meteor节点进程CPU使用率接近100%_Node.js_Meteor - Fatal编程技术网

Node.js Meteor节点进程CPU使用率接近100%

Node.js Meteor节点进程CPU使用率接近100%,node.js,meteor,Node.js,Meteor,当我的Meteor应用程序的流量达到峰值时,我遇到了麻烦(峰值不算什么,1k访问量,可能一天2500次页面浏览量)。CPU使用率会急剧上升,而且永远不会恢复,因此我开始使用Nodetime来监视使用情况,并一直在重新加载进程(永久重新启动),以使事情恢复正常 我对分析还比较陌生,所以找到根本原因让我不知所措。我相当确定这与我的应用程序的服务器代码有关,但分析似乎指出光纤模块是一个“热点”,我理解这有助于使我的服务器代码同步 下面是分析结果的一个片段。我希望有人能指导我在正确的方向上解决这个问题

当我的Meteor应用程序的流量达到峰值时,我遇到了麻烦(峰值不算什么,1k访问量,可能一天2500次页面浏览量)。CPU使用率会急剧上升,而且永远不会恢复,因此我开始使用Nodetime来监视使用情况,并一直在重新加载进程(
永久重新启动
),以使事情恢复正常

我对分析还比较陌生,所以找到根本原因让我不知所措。我相当确定这与我的应用程序的服务器代码有关,但分析似乎指出光纤模块是一个“热点”,我理解这有助于使我的服务器代码同步

下面是分析结果的一个片段。我希望有人能指导我在正确的方向上解决这个问题


虽然我对你的问题没有具体的答案,但我有处理我们的meteor应用程序的CPU问题的经验,因此我可以给你一个调查事项列表

  • 升级至meteor的最新版本和相应的节点版本(请参阅)。在撰写本文时,这是meteor 0.8.2和node 0.10.28

  • 阅读并阅读文章。后者提出了一个很好的观点,即您确实应该始终尝试延迟订阅的激活,直到您需要它们为止。特别是,您可能不需要为未登录的用户发布任何内容。根据我的经验,meteor CPU问题与订阅有关

  • 小心使用
    观察
    观察更改
    。这些都非常昂贵,而且很容易被滥用。特别是:

    • 当不再需要句柄时,请确保在句柄上调用
      stop()
      (请考虑使用类似这样的包,这样就可以为您完成此操作)
    • 仅获取绝对需要的集合和字段。通过不断扩散对象观察工作(需要大量CPU)。你拥有的对象越少,你需要计算的东西就越少
  • 在使用前考虑使用。使用-这会使应用程序的性能和CPU使用率日夜不同

  • 考虑使一些事情不反应(也在上面的文章中提到)。对我们来说,这是一场巨大的胜利。我们有一个非常昂贵的连接,用于该站点上两个经常访问的页面。当CPU大约每30分钟就被固定在100%时,我放弃了对该元素的反应,只是在服务器上进行连接,并通过方法调用将数据发送到客户端。我还为这些结果创建了一个服务器端过期缓存,并按用户存储它们(特别感谢Matt DeBergalis的建议)

  • 每晚进行一次预防性重启。我有一个CRON作业,它告诉<代码>永远>代码>每天在半夜一次重新启动我们的应用程序。这使CPU从约10%降至1%。这看起来像是黑魔法,但重置后CPU使用率发生变化的事实让我相信这是个好主意

  • 最新想法(1/13/14)
    • 我们一有了它就迁移到了(meteor 0.7),这带来了很大的不同。请注意,为了访问oplog,您可能需要托管自己的db或在您选择的托管提供商上运行专用实例。我还建议添加程序包,以实际判断其是否有效

    • 发布与关系中发现内存泄漏
      ,在撰写本文时,大气版本(v0.1.5)尚未被修改以反映这些更改。如果您在生产中使用它,我强烈建议您检查HEAD版本并运行它

    • 几周前我们停止了夜间重启。到目前为止一切都很好(祈求好运)

    最新想法(7/2/14)
    • 几个月前,我们切换到在服务器上使用弹性部署。它价格合理,性能非常好,而且它们甚至有一个可以告诉您如何启用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承诺实现是一个热点。