Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs 菜单
Docs 主页
/ /

连接风暴故障排除

连接风暴通常表现为连接计数突然激增,并且经常被误诊为数据库性能问题。

本页介绍了连接风暴和"too many connections" 错误的常见原因和解决方法。如果在完成以下部分后需要其他支持,联系技术支持。

要确认您的部署是否遇到连接风暴或连接限制问题,运行serverStatus 命令并检查是否有以下指示器:

您还可以检查部署的日志消息是否有大量具有快速增加的 "Connection accepted"属性的connectionCount 消息,或者慢速查询日志条目是否增加。

在Atlas部署中,您可以导航到Atlas用户用户界面中的集群,然后选择 MetricsConnections 以查看一段时间内的连接计数图表。

以下各节介绍连接风暴的常见原因以及解决方法。

如果将minPoolSize 设立为远低于maxPoolSize ,则驾驶员仅维护少量空闲连接。在繁重的工作负载下或重启后,驾驶员必须快速打开许多新连接才能达到工作池大小,这可能会导致新连接激增。

如果服务器或查询延迟增加,单个连接保持活动状态的时间会更长。这会迫使驾驶员打开额外的连接来处理传入的请求,从而增加总连接数。

如果您发现 connections.active 值较高且查询延迟增加,请在驾驶员连接字符串中将 minPoolSize设立为更接近 maxPoolSize 的值。这会预热连接池,并减少在负载下打开许多新连接的需要。

应用程序流量的突然增加可能会耗尽可用连接池,迫使驾驶员快速打开新连接。

如果您发现随着流量增加而出现连接峰值,请考虑在驾驶员连接字符串中将 minPoolSize 设置为更接近 maxPoolSize 的值。这可确保驾驶员保持足够的预建立连接来处理流量峰值,而无需快速打开新连接。

网络中断、滚动重启或突发的应用程序层级扩展事件都可能导致应用程序实例同时重新连接,从而使服务器因新的连接请求而不堪重负。

如果在部署事件或网络中断期间出现连接峰值,请考虑设置 maxPoolSize 以限制每个应用程序实例可以打开的连接总数。这限制了同时重新连接事件的影响。

MongoClient如果您在每次请求或函数调用时都创建一个新的 ,而不是重复使用单个共享实例,则每个客户端都可以打开自己独立的连接池,最多可达到配置的maxPoolSize 。在许多并发请求或短期执行环境中,这会使打开的连接总数成倍增加,并可能触发连接风暴。

如果您发现与请求量相关的连接计数稳定增加,请检查应用程序是否为每个请求实例化新的 MongoClient,并考虑将 MongoClient 实现为所有操作的单个共享实例。这可以稳定连接使用情况,并防止由池倍增引起的连接计数峰值。

在分片的集群上,每个mongos 路由器在每个分片上维护连接池。如果这些池的大小不正确,当路由器同时打开大量内部连接时,应用程序层级上的连接风暴可能会传播到分片层级。

如果您发现源自mongos 进程的连接风暴,请考虑:

每个Atlas 集群层级规定了每个节点的最大并发传入连接数。当应用程序打开的连接数超过层级允许的连接数时,集群可能会拒绝新的连接请求,并显示以下错误:

connection refused because too many open connections

connections.current如果您发现随着负载增加而出现连接拒绝,并且在调整池设置后情况没有改善,请检查 是否达到或接近集群层的限制。要按集群层查看连接限制,请参阅 Atlas Service 限制。

如果连接计数达到或接近集群层限制,请考虑升级到更高的集群层,以提高每个节点的连接限制。要扩展集群,请参阅修改集群。

要确认连接风暴已解决,请执行以下操作:

  • 重新运行serverStatus 并验证connections.current 是否返回到相对于connections.available 的预期水平。

  • 确认mongodmongos 日志不再显示与连接相关的错误。

  • 在Atlas部署中,确认Atlas Metrics 视图中的连接计数图表已返回到基线。

如果问题仍然存在,联系技术支持。在联系支持之前,请收集以下信息:

  • 输出 db.serverStatus()

  • mongodmongos 中显示连接相关错误或警告的日志摘录

  • 您的驾驶员连接字符串,具体来说是 maxPoolSizeminPoolSizewaitQueueTimeoutMS 的值

  • 对于Atlas部署,包括:

    • 应用程序程序实例的数量和部署拓扑结构

    • 问题发生期间Atlas Connections图表的屏幕截图

后退

性能优化

在此页面上