当我的Meteor应用程序达到其高峰流量时,我遇到了问题(这个高峰没什么,1k访问量,一天可能有2,500次浏览量).CPU使用率激增并且永远不会恢复,因此我已经开始使用Nodetime来监控使用情况,并且我一直在重新加载进程(forever restart
)以使事情恢复正常.
我对分析很新,所以找到根本原因使我无处可去.我相当肯定它与我的应用程序的服务器代码有关,但是分析似乎指向Fibers模块作为"热点"我理解帮助使我的服务器代码同步.
以下是分析结果的片段.我希望有人可以指导我正确的方向进行故障排除!
Dav*_*don 33
虽然我没有针对您的问题的具体答案,但我有经验处理我们的生产流星应用程序的CPU问题,因此我可以为您提供要调查的事项列表.
升级到最新版本的meteor和相应的节点版本(请参阅更改日志).截至本文撰写时,流星为0.8.2,节点为0.10.28.
阅读这和这文章.后者非常重要,你应该总是尝试延迟激活订阅,直到你需要它们.特别是您可能不需要为未登录的用户发布任何内容.根据我的经验,流星CPU问题与订阅有关.
小心observe
和observeChanges
.这些都很昂贵且易于滥用.特别是:
stop()
在不再需要时调用句柄(考虑使用像发布关系这样的包,这样就完成了).考虑制作一些不反应的东西(也在上面的文章中提到).对我们来说这是一场大胜利.我们有一个非常昂贵的连接,用于网站上两个经常访问的页面.当它达到CPU每100分钟大约100%挂钩的程度时,我放弃了该元素的反应性,只是在服务器上进行了连接并通过方法调用将数据发送到客户端.我还为这些结果创建了服务器端过期缓存,并由用户存储(特别感谢Matt DeBergalis提供此建议).
做一个预防性的夜间重启.我有一个cron工作,告诉forever
我每天半夜重启我们的应用程序.这使CPU从大约10%降低到1%.这看起来像黑魔法,但重置后CPU使用率发生变化这一事实让我相信这是一个好主意.
我们尽快迁移到oplog尾随(流星0.7)并且这产生了很大的不同.请注意,为了访问oplog,您可能需要托管自己的数据库或在您选择的主机提供程序上运行专用实例.我还建议添加facts
包来实际告诉它是否正常工作.
发现了一个内存泄漏,在publish-with-relations
撰写本文时,气氛版本(v0.1.5)没有被碰到以反映这些变化.如果您在生产中使用它,我强烈建议您查看HEAD版本并在本地运行它.
几个星期前我们停止了夜间重启.到目前为止一切都很好(手指交叉).
归档时间: |
|
查看次数: |
5388 次 |
最近记录: |