流星网站加载时间过多

时间:2019-09-14 17:06:49

标签: mongodb meteor

我有一个使用流星构建的webApp。 以下是规格:

Meteor version : 1.8
Mongo Version : 4.0.5

以下是我使用过的软件包的列表:

jquery@1.11.10 twbs:bootstrap@3.3.6 iron:router reactive-var@1.0.11 fortawesome:fontawesome blaze@2.1.8 accounts-password@1.5.1 mrt:mathjax email@1.2.3 momentjs:moment ian:accounts-ui-bootstrap-3@1.2.89 meteor-base@1.4.0 mongo@1.6.0 blaze-html-templates@1.0.4 session@1.2.0 tracker@1.2.0 logging@1.1.20 reload@1.2.0 ejson@1.1.0 spacebars@1.0.12 standard-minifier-css@1.5.2 standard-minifier-js@2.4.0 jss:jstree meteorhacks:subs-manager aldeed:template-extension reywood:publish-composite shell-server@0.4.0 stylus@=2.513.13 accounts-base@1.4.3 iron:middleware-stack@1.1.0 http@1.4.1 ecmascript@0.12.4 dynamic-import@0.5.0 sha@1.0.9 simple:json-routes underscore@1.0.10 aldeed:simple-schema rafaelhdr:google-charts meteorhacks:aggregate

该WebApp托管在具有16GB RAM和04处理器的AWS ec2实例上。该应用程序使用pub-sub方法。现在的问题是,每当有50个以上的并发连接时,CPU使用率就会超过60%,并且webApp的使用速度会很烦人。根据我的发现,这可能是由于两个原因造成的,一个是我使用的pub-sub模式太繁琐,即我在每个页面上都大量使用了数据库订阅,而meteor则与它连续保持着开放连接。可能导致大量资源使用的其他原因可能是mongoDB使用。根据dbStats,该数据库使用超过06GB的RAM。详细信息如下:enter image description here enter image description here

我不确定为什么会这样。我能想到的唯一方法是点击并试用(删除订阅然后进行测试),但这将非常耗时,而且还不能提供充分的证据。

有人可以帮我解决一下吗。

1 个答案:

答案 0 :(得分:1)

根据应用程序的设计方式(从数据角度出发),这种缺乏性能的原因可能很多。

一些建议:

  • 检查您的收藏夹中是否有索引
  • 避免在发布过程中进行聚合,即对数据库进行非规范化,改为发布游标数组,限制文档的大小等。
  • 过滤查询中无用的字段
  • 将数据量限制为相关部分(延迟加载和分页订阅)
  • 考虑您经常使用的馆藏的全局发布/订阅,而不是过于频繁地在基于路线的模式下重新加载它们
  • 跟踪基于小型组件的潜艇,并尝试将其置于更高的级别,以免产生30个潜艇,而不是一个潜艇。

我最好的猜测是,您可能需要合理化数据库“结构”并尽可能避免数据聚合。

您还可能在某处误用了低级收集api(例如cursor.observe())。