流星:多个不必要的mongodb连接使数据库部署饱和

时间:2018-08-21 17:38:16

标签: node.js mongodb meteor

我维护了一些在AWS Elastic-Beanstalk(在64位Amazon-Linux / 4.5.2上)上部署的流星1.7.0.3应用程序。所有连接到托管的mongodb部署(在Compose上,mongodb版本3.2.18)。最近,mongodb部署指标已变得疯狂。部署充满了数千个连接和更多传入请求。当连接数达到5000时,部署的路由器的内存不足,连接被拒绝。

不用说,这导致应用程序无响应/无法使用!

有趣的点/细节:

  1. 它发生在多个流星应用程序上,都具有不同的代码库 几乎没有共同的代码。通用代码是 声明集合的代码,例如:

    const Accounts = new Mongo.Collection('account');

  2. ssh'进入ec2,可以看到节点服务器持有 到数据库的多个连接:

    sudo lsof -p $(ps awx | grep node | grep main.js | cut -f 2 -d " ") | egrep 'TCP|UDP'

结果:

node    3749 nodejs 1486u  IPv4 237550      0t0    TCP ip-172-31-60-74.ec2.internal:48210->ec2-54-174-178-28.compute-1.amazonaws.com:17847 (ESTABLISHED)
node    3749 nodejs 1487u  IPv4 237694      0t0    TCP ip-172-31-60-74.ec2.internal:48306->ec2-54-174-178-28.compute-1.amazonaws.com:17847 (ESTABLISHED)
node    3749 nodejs 1488u  IPv4 237854      0t0    TCP ip-172-31-60-74.ec2.internal:38462->ec2-54-84-155-20.compute-1.amazonaws.com:17847 (ESTABLISHED)
node    3749 nodejs 1489u  IPv4 238043      0t0    TCP ip-172-31-60-74.ec2.internal:48506->ec2-54-174-178-28.compute-1.amazonaws.com:17847 (ESTABLISHED)
...

总共有数千行。极限似乎是〜5000。达到该数量后,mongodb部署将拒绝连接。

  1. 不断创建新连接会导致node.js进程的cpu值高于正常值,并且占用的内存不断增加。

  2. 如果重新启动节点,则连接数将恢复到很少,并且可以在其中停留数小时。

  3. 不确定这是如何触发的,但是某些时候其中一台服务器开始创建新的连接,而所有的地狱都无法解决。

  4. 流星服务器日志为空。没有什么表明有问题

  5. 有问题的流星应用程序重新启动时,mongodb部署指标显示开放连接和路由器内存负载显着下降

问题是,我可以检查什么? 有什么建议最适合调查哪些工具/技术? (也许https://github.com/meteorhacks/kadira会有用吗?)

或更妙的是,也许其他人对此有所了解并找到解决方案?

8月30日更新:

从Compose录制注释:

  

对于某些用户,连接计数问题似乎是由   节点本机驱动程序中的错误   fixedv3.1.3   发布(大约只有2周的时间)。

任何人都可以告诉如何更新Meteor项目以使用较新版本的mongodb驱动程序吗?

0 个答案:

没有答案