MongoDB Sharding架构下连接数很容易达到很高,这里连接数分为几个概念: tcp 连接数 netstat可以统计的,一般这个是最高.如果mongod/mongos在同一台服务器,更明显。 参考命令:

netstat -ant|awk ‘{print $5}’ |awk -F: ‘{print $1}’|sort |uniq -c|sort -rn mongos/mongod

连接数 mongostat/db.serverStatus()/connPoolStats

可统计。

连接数多高算高呢?

这要看连接到mongodb集群应用服务器实例数、qps(增删改查)等判断。 应用服务器单台,如果qps<100, ,mongos连接数超过2000,肯定是高了。这一般是由于连接池配置不合理导致。 mongod/mongos 默认最大连接数maxConns=20000,2.4版本及以前版本最大不能超过这个数值,2.6版本(开发版2.5版本)取消这个限制。 相关链接http://nosqldb.org/topic/50ca8a50ee680fee790001f2

什么原因导致连接数过高

  • 连接池配置不合理 分片情况下,现象是tcp 连接数过高(如达到20000),mongos连接数过高(如超过10000) java为例,connectionsPerHost 不宜配置过大,官方默认值由原来10改成100了,而且有默认5倍的乘数(threadsAllowedToBlockForConnectionMultiplier),一般20~50就可以了。

  • 应用服务器实例过多

我们遇到的场景,当连接到mongos的应用服务器(如Tomcat实例数量)过百,甚至达到近200台时,tcp连接数超高,达到15000以 上,查看mongod对应端口连接数高达8000多,mongos 2000多。此时ops(query,insert,update,delete)低于200每秒,。定期重启(如一周一次)mongos可适当缓解该问 题。

  • mongodb本身的原因 表现为mongos连接数不高(如1000+),mongod连接数比较高(如8000+)。

如何解决 总结一下,连接数高分为几个场景: 应用服务器实例过多,可统计每个实例建立的连接数,适当调低连接池参数。 mongos连接数高,这种就是配置的问题,更改连接池参数。 mongos连接数不高,mongod连接数比较高,如超过5000,如果连接池配置合理还比较高的话,尝试启用releaseConnectionsAfterResponse参数(2.2.4版本以上),该参数为 隐藏参数releaseConnectionsAfterResponse

mongos> use admin
switched to db admin
mongos> db.runCommand({ setParameter : 1, releaseConnectionsAfterResponse : true })
{ "was" : false, "ok" : 1 }

或者

shell> mongos --setParameter "releaseConnectionsAfterResponse=true" --configdb ...

该参数注意事项: 写操作需要立即调用getLastError (w=1,即安全写模式),w=2(等待从库写确认)的时候可能会有些错误。 升级过后,或者重启mongos进程后,需要重新设置该参数,该参数只对单个mongos生效。 启用releaseConnectionsAfterResponse 参数,tcp 连接数明显降低到比较稳定数目。几个小时,tcp连接数从8000多降到4000多,效果不错。

  • releaseConnectionsAfterResponse 参数原理

通常,对于每个mongos->mongod连接是单独缓存的,并且该连接不能重复使用,即使该连接是空闲时也是如此,一直到连接关闭连接回 到连接池中才能再使用;releaseConnectionsAfterResponse 参数启用后,mongos->mongod之间的连接在完成一个读操作或者安全写操作后能够重复使用(把连接放到连接池中而不是缓存,即更早的回归 到连接池中),releaseConnectionsAfterResponse参数简单讲就是mongos->mongod的连接更早的回到连接 池中,这样就不会开太多的连接了,从而减少连接数。 Create a new serverParameter for mongos, “releaseConnectionsAfterResponse,” which enables returning ShardConnections from the per-socket pool to the global pool after each read operation. This should reduce the total number of outgoing mongos connections to each shard. the option allows better use of the connection pool, it doesn’t invalidate the connections in the pool. Normally, mongos->mongod connections for insert/update/delete/query are cached individually for each incoming connection, and can’t be re-used until the incoming connection is closed, even if they are idle and there are other active incoming connections. What the releaseConnectionsAfterResponse option does is allow the mongos->mongod connection to be re-used (returned to the pool) after any read op (including getLastError(), so after safe writes as well). It shouldn’t have a significant performance impact - the connection isn’t destroyed, it’s just returned from the incoming connection cache to the shared pool early.

代码: https://github.com/mongodb/mongo/commit/706459a8af0b278609d70e7122595243df6aeee8 https://github.com/mongodb/mongo/commit/74323d671a216c8c87fcb295ed743f830d5212ee https://github.com/mongodb/mongo/commit/5d5fe49dfb5f452832b9d44fddbfb2a4e8b42f2a

=============== - connPoolTimeout设置

(该参数不在官方没有) 效果

mongos> db.runCommand({ setParameter : 1, connPoolTimeout : 900 })
{ "was" : 1800, "ok" : 1 }

初步测试,效果不明显。

  • releaseConnections

计划添加个命令releaseConnections,从mongod运行,减少复制集连接数

转载于:https://www.cnblogs.com/taozi32/p/5375362.html

MongoDB 连接数高产生原因及解决相关推荐

  1. MySQL CPU 使用率高的原因和解决方法

    MySQL CPU 使用率高的原因和解决方法 参考文章: (1)MySQL CPU 使用率高的原因和解决方法 (2)https://www.cnblogs.com/wyy123/p/9258513.h ...

  2. MySQL 实例空间使用率过高的原因和解决方法

    MySQL 实例空间使用率过高的原因和解决方法 参考文章: (1)MySQL 实例空间使用率过高的原因和解决方法 (2)https://www.cnblogs.com/drizzle-xu/p/ali ...

  3. win10关闭快速启动_内存占用率过高怎么办?Win10电脑内存占用率很高的原因和解决方法...

    内存占用率过高,是电脑十分常见的电脑故障,出现的现象就是什么软件还没有打开,内存占用了70%以上,甚至是99%,出现电脑明显卡顿的问题.不过想要解决内存占用率高不是简单的事情,因为可能性比较多,可能是 ...

  4. MySQL CPU 使用率高的原因和解决方法(来自aliyun官方文档)

    MySQL CPU 使用率高的原因和解决方法 更新时间:2017-03-17 13:25:52   分享: 用户在使用 MySQL 实例时,会遇到 CPU 使用率过高甚至达到 100% 的情况.本文将 ...

  5. mysql iops_MySQL实例IOPS使用率高的原因和解决方法

    问题描述 MySQL实例在日常使用中会出现实例IOPS使用率高的情况,本文将介绍造成该状况的主要原因和解决方法. 问题原因 实例内存满足不了缓存数据或排序等需要,导致产生大量的物理IO. 查询执行效率 ...

  6. mysql利用cpu率高_MySQL CPU 使用率高的原因和解决方法

    用户在使用 MySQL 实例时,会遇到 CPU 使用率过高甚至达到 100% 的情况.本文将介绍造成该状况的常见原因以及解决方法,并通过 CPU 使用率为 100% 的典型场景,来分析引起该状况的原因 ...

  7. mysql cpu 高 原因 汇总_MySQL CPU 使用率高的原因和解决方法(来自aliyun官方文档)

    用户在使用 MySQL 实例时,会遇到 CPU 使用率过高甚至达到 100% 的情况.本文将介绍造成该状况的常见原因以及解决方法,并通过 CPU 使用率为 100% 的典型场景,来分析引起该状况的原因 ...

  8. Windows 10 操作系统 System Interrupt 系统中断 CPU 占用率高的原因和解决方法

    原文:7 Fixes to System Interrupts High CPU Usage in Windows 10 什么是系统中断? 为什么系统中断使用这么多 CPU? 是病毒吗? 如果您使用 ...

  9. 局域网丢包率高的原因与解决_一文读懂!城市污水处理厂出水氨氮高的原因及解决办法...

    城市污水处理厂出水氨氮高的原因 1.硝化菌受自身活性降低及氧传输浓度梯度下降; 2.工艺本身的问题,曝气池单元停留时间偏小,系统的抗冲击负荷能力也就相对较弱. 解决办法: (1) 减少进水量,减小内回 ...

最新文章

  1. ubuntu 安装 lamp 环境
  2. ByteTrack 多目标跟踪 测试笔记
  3. HDFS2.X架构及工作原理
  4. java编写科赫曲线_分形——科赫曲线
  5. springboot 不同环境不同的配置
  6. 小二,先来两桂花豆沙包!
  7. 工厂模式个人案例_工厂设计模式案例研究
  8. strictmath_Java StrictMath ulp()方法与示例
  9. centos 6.2安装mysql_CentOS 6.2下安装MySQL_服务器知识学堂-中关村在线
  10. ZK UserGuide(一)理解/userguide/index.zul导航原理
  11. 经典怀旧软件----PP点点通
  12. Hadoop集群配置(二)免密登录和集群配置
  13. Java面向对象三大特性
  14. Proe/Creo产品结构设计概述
  15. UIWebView的使用---safri
  16. 基于腾讯云播放器封装的Flutter Video Player插件
  17. 【转】图像视觉开源代码
  18. PTA 520 钻石争霸赛 2021
  19. 字符版本贪吃蛇游戏设计及算法
  20. docker/Dockerfile/docker compose

热门文章

  1. T-SQL查询进阶--流程控制语句
  2. UML建模之活动图介绍
  3. UML总结—时序图(Sequence Diagram)和协作图(Collaboration Diagram)
  4. 操作系统经典书籍--现代操作系统
  5. springmvc二十五:springmvc支持ajax
  6. jvm三:jvm参数
  7. WebApi数据验证——编写自定义数据注解(Data Annotations)
  8. 「原创」马云又嗨啦,云栖音乐节与李健同台飙歌,把健哥都带跑调了
  9. (转)写的非常好的一个WPF学习之路
  10. nginx访问控制:如何通过map来控制http_x_forwarded_for访问限制