MongDB连接池参数serverSelectionTimeout、connectTimeout、maxWaitTime和socketTimeout介绍

MongDB Client请求查询数据,需要包括五个阶段:

  1. MongoDB Client需要找到可用的MongoDB Server
  2. MongoDB Client需要和MongoDB Server建立(new)Connection
  3. 应用程序处理线程从Connection Pool中获取Connection
  4. 数据传输(获取连接后,进行Socket通信,获取数据)
  5. 断开Collection

那么,MongoDB Client驱动设置中网络相关等待超时参数serverSelectionTimeout、connectTimeout、maxWaitTime

和socketTimeout分别对应上面哪个环节呢?

参数serverSelectionTimeout:对应第1个环节,即MongoDB Client需要找到可用的MongoDB Server所需要的等待时间,                                             MongDB部署的生产一般由多个服务器组成,要么作为一个复制集或者作为一个分片集群,参数                                                     serverSelectionTimeout的值即为多长时间内找不到合适服务器时候就决定放弃的时间间隔;

参数connectTimeout:对应第2个环节,每次创建Connection,对应的网络等待。单位毫秒数, 0表示没有限制

参数maxWaitTime:对应第3个环节,应用程序处理线程从连接池中获取Collection,对应的网络等待时间。单位毫秒数,0表示                                   不等待,负数表示等待时间不确定

参数socketTimeout:对应第4个环节,获取Connection后,就有了Socket通信,获取数据,即在MonogoDB Client                                                      和MonogoDB Server的Socket通信过程中的网络等待时间。单位毫秒数,默认配置为0,也就是没有限制,                                  没有超 时限制,系统出了问题也不容易发现,应该根据实际情况,给出合理的超时时间。

其他相关参数如下:

connectionsPerHost:对mongo实例来说,每个host允许链接的最大链接数,这些链接空闲时会放入池中,如果链接被耗尽,任何请求链接的操作会被阻塞等待链接可用,推荐配置10

minPoolsSize:当Connection空闲时,Connection Pool中最少Connection保有量;

threadsAllowedToBlockForConnectionMultiplier:每个Connection的可以阻塞等待的线程队列数,它以上面connectionsPerHost值相乘的结果就是阻塞等待的线程队列最大值。如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误。

socketKeepAlive:该标志用于控制socket保持活动的功能,通过防火墙保持连接活着
socketKeepAlive=false

autoConnectRetry:这个控制是否在一个Connection时,系统会自动重试
#true:假如Connection不能建立时,驱动将重试相同的server,有最大的重试次数,默认为15次,这样可以避免一些server因为一些阻塞操作零时down而驱动抛出异常,这个对平滑过度到一个新的master,也是很有用的,注意:当集群为复制集时,驱动将在这段时间里,尝试链接到旧的master上,而不会马上链接到新master上
#false 当在进行socket读写时,不会阻止异常抛出,驱动已经有自动重建破坏链接和重试读操作. 推荐配置false
autoConnectRetry=false
#重新打开链接到相同server的最大毫秒数,推荐配置为0,如果 autoConnectRetry=true,表示时间为15s
#com.jd.mongodbclient2.mongo.JDClientMongo.maxAutoConnectRetryTime=false
#表示当没有手动关闭游标时,是否有一个自动释放游标对象的方法,如果你总是很小心的关闭游标,则可以将其设为false 推荐配置true

参考文档:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73c618b85482488c65f93130a1c187bb3e57a770d468e843a7a40f80918bdb02172414277e9cc99ce1180e7852859d4707e360b8637478445f88b15639a7dcc4de9d946bae6a56fc5fec5d3a902139117523ac1e4ce074042c52ea75475b4e68e49651e47e4bc763ea2056028ef651be910eee1423340c7e1dd2d139e76853c0696df63e0&p=c9759a46d6c104fc57efc56f16078f&newp=873fc64ad4d81ce708e2977e0f0081231610db2151d4da116b82c825d7331b001c3bbfb42326120fd4c479640aaa4c5dedf63571330923a3dda5c91d9fb4c57479937a7c&user=baidu&fm=sc&query=ServerSelctionTimeOut+mongodb&qid=fcf2e23c00010dfb&p1=1

猜你喜欢

转载自blog.csdn.net/pursuer211/article/details/82994027
今日推荐