文档首页> 文档数据库服务 DDS> 最佳实践> 排查DDS实例连接数耗尽的问题
更新时间:2023-08-31 GMT+08:00
分享

排查DDS实例连接数耗尽的问题

数据库连接数表示应用程序可以同时连接数据库的数量,与您应用程序或者网站能够支持的最大用户数没有关系。
  • 对于集群实例,一般指客户端同mongos之间的连接数。
  • 对于副本集实例,一般指客户端同Primary节点和Secondary节点之间的连接数。

问题现象

当DDS实例的连接数已满时,新发起的连接请求将无法被响应,从而导致实例连接失败。
  • 使用Mongo Shell连接实例时,出现如下提示,表示当前连接池的连接数已满。

  • 使用Python连接实例时,出现以下提示,表示当前连接池的连接数已满。

    pymongo.errors.ServerSelectionTimeoutError: connection closed, connection closed

  • 查看实例监控,发现实例连接数确实被耗尽。

解决方法

经过上述步骤确认为连接数耗尽问题后,需要根据突发流量与长期业务两种情况分别处理。
  • 突发流量造成的连接数满,考虑重启实例或节点释放当前连接。并同时排查客户端连接,是否存在大量重试请求,如果是大量重试请求引起的连接数耗尽,考虑修改客户端参数(修改重试逻辑,增大超时重试时长),从而避免连接数积压。

    重启实例的操作会将实例的节点进行轮转重启,每个节点会有30秒左右的闪断,如果集合的数量较多(超过1万),闪断时间也会随之变长,重启前请做好业务安排并确保应用有重连机制。

  • 针对长期业务导致的连接数耗尽,可以适当上调最大连接数(修改“net.maxIncomingConnections”的值,该参数修改后实时生效),保证每次调整幅度在20%以内,调整后观察负载变化。如果发现上调连接数后负载较高,说明实例负载已经达到瓶颈,请及时进行规格扩容
分享:

    相关文档

    相关产品