当MongoDB实例的连接数被耗尽后,新发起的连接请求将无法被响应,本文将介绍如何排查因连接数耗尽导致的数据库连接问题。

不同的MongoDB实例规格对应的最大连接数不尽相同,详情请参见实例规格表

故障表现

  • 部署的应用程序突然无法连接数据库。
  • 已正确设置了白名单,通过Mongo Shell连接数据库时,提示如下错误:
    2019-07-10T10:30:43.597+0800 E QUERY    [js] Error: network error while attempting to run command 'isMaster' on host 'dds-bpxxxxxxxx.mongodb.rds.aliyuncs.com:3717'  :
    connect@src/mongo/shell/mongo.js:328:13
    @(connect):1:6
    exception: connect failed
  • 已正确设置了白名单,通过DMS连接数据库时,提示如下错误:

准备工作

为更快地获取所需的监控信息,建议您将MongoDB实例的监控粒度设置为秒级,详情请参见设置监控采集粒度

检查连接数是否被耗尽

  1. 登录MongoDB管理控制台
  2. 在页面左上角,选择实例所在的地域。
  3. 根据实例类型,在左侧导航栏单击副本集实例列表分片集群实例列表
  4. 找到目标实例,单击实例ID。
  5. 在左侧导航栏中,单击监控信息
  6. 监控信息页面,查看实例当前的Connections(连接数)信息。 如下图所示,该实例已使用的连接数为500
    说明 实例为分片集群实例时,您需要在页面右上角选择业务当前使用的Mongos节点。


  7. 在左侧导航栏,单击基本信息
  8. 基本信息页面中,您可以查看到当前实例规格对应的最大连接数,本案例为500
    说明 结合第6步获取到的实例已使用的连接数,可判断实例的连接数被耗尽。


解决方法

您可以通过重启实例来临时释放所有的连接。为避免再次出现该问题,重启后建议您参考下述方法进行调整:
说明 重启实例的操作会将实例的节点进行轮转重启,每个节点会有30秒左右的闪断,如果集合的数量较多(超过1万),闪断时间也会随之变长,重启前请做好业务安排并确保应用有重连机制。