mongo连接数暴增问题

故障现象

  • 使用到mongodb的服务一律无法正确使用,提示链接过多
  • 相关使用到mongodb的服务器有大量mongodb的链接

排查思路

  • 由于公司mongodb使用的是阿里服务,所以可以使用阿里云的运维面板查看那台机器链接mongodb是异常的

  • 使用 netstat -na | grep 27017 | wc -l 命令统计当前机器持久化多少个mongodb链接

  • 查阅相关技术文档

故障分析

  • ❌ 可能是业务代码编写逻辑错误导致(检查相关使用mongodb代码块未发现明显问题)
  • ❌ 可能是PHP结束的时候未释放mongodb链接导致的(查阅相关文档发现,很早就舍弃mongodb链接释放的函数 已经被官方标注为过时了)
  • ❌ 可能是底层 php 的mongodb驱动拓展异常 (看了大半天源码也未发现明显问题,检查驱动版本也未较大型bug)
  • ✔️ 可能是初始化mongodb链接的写法是错的(查阅官方文档,确实是有问题。并且之前的写法还不支持故障转移,一旦发生主从切换将会导致一直使用已经切换成从库的链接

后续

导致mongodb链接飙高是因为之前的写法是验证授权的数据库填写成链接库。例如这样:

这样的写法将会导致生成了两个不一样的DSN链接

  1. mongodb://1.15.150.202:27017/test1
  2. mongodb://1.15.150.202:27017/test2
    而php mongodb驱动持久化链接是根据 hash mongodb dsn链接来确定唯一性,不唯一则进行创建一个新的链接。所以就会一个请求处理进程就产生了两个链接,正确来说只需要产生一个即可。

正确操作方法是将验证身份库统一填写成一个,这样生成的链接就只会有一条
mongodb://1.15.150.202:27017/admin

参考文献

添加新评论

文章状态:已收录~