paulwong

          MongDB連接池參數(shù)serverSelectionTimeout、connectTimeout、maxWaitTime和socketTimeout介紹

          MongDB Client請求查詢數(shù)據(jù),需要包括五個階段:
          MongoDB Client需要找到可用的MongoDB Server
          MongoDB Client需要和MongoDB Server建立(new)Connection
          應用程序處理線程從Connection Pool中獲取Connection
          數(shù)據(jù)傳輸(獲取連接后,進行Socket通信,獲取數(shù)據(jù))
          斷開Collection
          那么,MongoDB Client驅(qū)動設置中網(wǎng)絡相關(guān)等待超時參數(shù)serverSelectionTimeout、connectTimeout、maxWaitTime和socketTimeout分別對應上面哪個環(huán)節(jié)呢?
          參數(shù)serverSelectionTimeout:對應第1個環(huán)節(jié),即MongoDB Client需要找到可用的MongoDB Server所需要的等待時間,                                             MongDB部署的生產(chǎn)一般由多個服務器組成,要么作為一個復制集或者作為一個分片集群,參數(shù)                                                     serverSelectionTimeout的值即為多長時間內(nèi)找不到合適服務器時候就決定放棄的時間間隔;
          參數(shù)connectTimeout:對應第2個環(huán)節(jié),每次創(chuàng)建Connection,對應的網(wǎng)絡等待。單位毫秒數(shù), 0表示沒有限制;
          參數(shù)maxWaitTime:對應第3個環(huán)節(jié),應用程序處理線程從連接池中獲取Collection,對應的網(wǎng)絡等待時間。單位毫秒數(shù),0表示                                   不等待,負數(shù)表示等待時間不確定;
          參數(shù)socketTimeout:對應第4個環(huán)節(jié),獲取Connection后,就有了Socket通信,獲取數(shù)據(jù),即在MonogoDB Client                                                      和MonogoDB Server的Socket通信過程中的網(wǎng)絡等待時間。單位毫秒數(shù),默認配置為0,也就是沒有限制,                                  沒有超 時限制,系統(tǒng)出了問題也不容易發(fā)現(xiàn),應該根據(jù)實際情況,給出合理的超時時間。
           
          其他相關(guān)參數(shù)如下:
          connectionsPerHost:對mongo實例來說,每個host允許鏈接的最大鏈接數(shù),這些鏈接空閑時會放入池中,如果鏈接被耗盡,任何請求鏈接的操作會被阻塞等待鏈接可用,推薦配置10
          minPoolsSize:當Connection空閑時,Connection Pool中最少Connection保有量;
          threadsAllowedToBlockForConnectionMultiplier:每個Connection的可以阻塞等待的線程隊列數(shù),它以上面connectionsPerHost值相乘的結(jié)果就是阻塞等待的線程隊列最大值。如果連接線程排滿了隊列就會拋出“Out of semaphores to get db”錯誤。
          socketKeepAlive:該標志用于控制socket保持活動的功能,通過防火墻保持連接活著
          socketKeepAlive=false
          autoConnectRetry:這個控制是否在一個Connection時,系統(tǒng)會自動重試
          #true:假如Connection不能建立時,驅(qū)動將重試相同的server,有最大的重試次數(shù),默認為15次,這樣可以避免一些server因為一些阻塞操作零時down而驅(qū)動拋出異常,這個對平滑過度到一個新的master,也是很有用的,注意:當集群為復制集時,驅(qū)動將在這段時間里,嘗試鏈接到舊的master上,而不會馬上鏈接到新master上
          #false 當在進行socket讀寫時,不會阻止異常拋出,驅(qū)動已經(jīng)有自動重建破壞鏈接和重試讀操作. 推薦配置false
          autoConnectRetry=false
          #重新打開鏈接到相同server的最大毫秒數(shù),推薦配置為0,如果 autoConnectRetry=true,表示時間為15s
          #com.jd.mongodbclient2.mongo.JDClientMongo.maxAutoConnectRetryTime=false
          #表示當沒有手動關(guān)閉游標時,是否有一個自動釋放游標對象的方法,如果你總是很小心的關(guān)閉游標,則可以將其設為false 推薦配置true

          https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options
          ————————————————
          版權(quán)聲明:本文為CSDN博主「pursuer211」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
          原文鏈接:https://blog.csdn.net/pursuer211/article/details/82994027

          posted on 2020-03-07 20:58 paulwong 閱讀(1313) 評論(0)  編輯  收藏 所屬分類: MONGODB

          主站蜘蛛池模板: 博白县| 湖南省| 巴中市| 兰考县| 东兰县| 禹州市| 阳泉市| 杭州市| 揭东县| 昌平区| 淳安县| 汤阴县| 迭部县| 时尚| 东城区| 梅河口市| 新安县| 固始县| 孝昌县| 吉安县| 奉化市| 郎溪县| 宽城| 林周县| 轮台县| 南乐县| 延吉市| 浦县| 东宁县| 班戈县| 锡林浩特市| 高密市| 磐安县| 宣威市| 巴彦淖尔市| 沈丘县| 荣昌县| 原平市| 五河县| 高碑店市| 无锡市|