我维护了一些在AWS Elastic-Beanstalk(在64位Amazon-Linux / 4.5.2上)上部署的流星1.7.0.3应用程序。所有连接到托管的mongodb部署(在Compose上,mongodb版本3.2.18)。最近,mongodb部署指标已变得疯狂。部署充满了数千个连接和更多传入请求。当连接数达到5000时,部署的路由器的内存不足,连接被拒绝。
不用说,这导致应用程序无响应/无法使用!
有趣的点/细节:
它发生在多个流星应用程序上,都具有不同的代码库 几乎没有共同的代码。通用代码是 声明集合的代码,例如:
const Accounts = new Mongo.Collection('account');
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部署将拒绝连接。
不断创建新连接会导致node.js进程的cpu值高于正常值,并且占用的内存不断增加。
如果重新启动节点,则连接数将恢复到很少,并且可以在其中停留数小时。
不确定这是如何触发的,但是某些时候其中一台服务器开始创建新的连接,而所有的地狱都无法解决。
流星服务器日志为空。没有什么表明有问题
有问题的流星应用程序重新启动时,mongodb部署指标显示开放连接和路由器内存负载显着下降
问题是,我可以检查什么? 有什么建议最适合调查哪些工具/技术? (也许https://github.com/meteorhacks/kadira会有用吗?)
或更妙的是,也许其他人对此有所了解并找到解决方案?
8月30日更新:
从Compose录制注释:
对于某些用户,连接计数问题似乎是由 节点本机驱动程序中的错误 fixed与
v3.1.3
发布(大约只有2周的时间)。
任何人都可以告诉如何更新Meteor项目以使用较新版本的mongodb驱动程序吗?