由于大量(ish?)流量,Meteor应用程序失去了与MongoDB的连接

时间:2017-12-27 03:54:56

标签: javascript html css mongodb meteor

我最近开始学习meteor,我正在开发一个类似于公交车时刻表应用程序的应用程序;我有几个屏幕(大约30个带浏览器的设备),我将它们全部连接到一个在cmd上运行我的应用程序的localhost(应用程序使用带有本地MongoDB的Windows 10离线,没有在线服务器)。每组屏幕显示相关总线及其时间表,从MongoDB集合中提取。

该应用程序过去工作得很好,但当我再添加10个屏幕时,客户端似乎在几分钟后与服务器断开连接;我有流量调用在屏幕上显示服务器时间,这次显示为 undefined 当服务器掉线而我无法通过MeteorToys看到我的任何收藏文件时,我看到了收藏品,但是文件是0.另外,我无法登录我的管理页面(这是我制作的基本用户界面,简单的MongoDB帐户集合)

值得一提的是整个应用程序都没有崩溃;我仍然可以导航到我的页面,因为我的布局,HTML和CSS仍然显示,只是我停止的服务器相关功能。

我意识到这是一个流量问题,因为当我断开所有屏幕并运行应用程序时,它运行正常。此外,当我逐个重新连接时,它似乎也可以正常工作。

我在客户端的控制台上没有出现任何错误,在服务器CMD上,应用程序没有崩溃,它一直没有出现任何错误。

另外,我每秒都将Meteor.status()ping添加到我的控制台,我得到了这个

{status: "connected", connected: true, retryCount: 0} 

这意味着从技术上讲服务器没有脱机?

我很失落,我该怎么做才能纠正这个问题?

更新

我注意到我有几个每秒运行一次的ServerSession,从服务器上获取时间。我将它们改为正常的会话,我现在面临着另一个问题;我认为某处存在内存泄漏;当它冻结我注意到我的RAM使用率暴涨到8GB(我的max_old_space设置为8912因此它不应该是一个问题)正常使用时间约为600-900MB

然后我得到FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory => Exited with code: 3

使用503 (Service Unavailable)在浏览器上无法访问

和服务器 然后服务器重新启动,它也会做同样的事情。帮助:(

1 个答案:

答案 0 :(得分:1)

我在应用程序加载大量数据和进行计算时遇到了相同的行为。当nodejs服务器CPU处于加载状态时,应用程序将失去与其节点后端的连接,并且当数据库服务器CPU处于加载状态时,应用程序将失去与数据库的连接。

以下是一些建议:

  • 如果你没有,请从这个阅读开始:https://bulletproofmeteor.com/几年前已经写过,但内部仍然有很多好的做法
  • 在您的计算机上监控您的应用,尝试了解瓶颈是什么:数据传输,磁盘读取,CPU密集型任务?
  • 查看您的出版物/订阅模型。您可能会向客户端发送过多数据,也许您可​​以限制所需的数据量?
  • 如果您的设置很关键,请不要使用meteor命令在单个Windows机器上运行它! :首先使用meteor build https://guide.meteor.com/build-tool.html
  • 构建正确的nodejs应用
  • 使用nginx来处理传入的连接,它是健壮且可扩展的
  • 为数据库使用单独的主机,也许是3台机器的mongo副本集(这可能通过提供更多数据库可用性来解决您的问题,但我还没有测试过)

关于构建的编辑:构建应用程序后,您将获得一个文件夹。以下是在生产模式下启动应用程序的步骤:

cd into your meteor app folder
meteor build targetFolder --directory
cd targetFolder/bundle
(cd programs/server && npm install)
meteor node targetFolder/main.js #I use meteor node to ensure version compatibility