MongoDB在java中使用時,客戶端連接參數說明;
此說明居於mongo驅動包:mongodb-driver-3.4.2,官方驅動下載地址:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
緣起一次mongo連接,客戶端連接不會釋放;
客戶端不會釋放帶來的問題是:
1、如果在某次請求過多時,開啓的線程過多,導致連接猛增,快速打滿連接池,建立的連接不會釋放;
2、大量不用的連接存放在連接池中,佔用mongo連接資源;
經排查,mongo連接池中,有一個參數:maxIdleTimeMS未設置,在沒有設置此參數時,mongo驅動默認爲0,如果爲0,則連接池永遠不會釋放,不管該連接是否會被使用。
源碼:在ConnectionString類中,參考官方說明:https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options
通過源碼截圖可以看出,參數名稱不區分大小寫。
說明(部分):
類型 | 參數名 | 說明 |
---|---|---|
連接選項 | ssl | 連接是否使用SSL進行連接,默認根據url來 |
connectTimeoutMS | 連接超時時間,單位爲毫秒,默認爲0,永不超時 | |
socketTimeoutMS | 發送或者接收socket的超時時間,單位爲毫秒,默認爲0,永不超時 | |
連接池 | maxPoolSize | 連接池最大數,默認值爲100,主要是參考客戶端應用個數以及mongo的服務器端設置的最大連接處來評估每個客戶端最大開啓的數量。 |
minPoolSize | 連接池中最小連接存活數,默認爲0,啓動時,初始化的最小連接數。 | |
maxIdleTimeMS |
一個連接在池中的最大空閒時間,如果空閒超過此時間,則會被移除連接池,同時關閉連接,釋放連接資源; 默認爲0,永不釋放。 單位爲毫秒。 |
|
maxLifeTimeMS |
最大有效存活時間,默認爲0,永遠存活 | |
waitQueueMultiple | 等待最大連接數,與maxPoolSize合用,傳遞給驅動中的參數
threadsAllowedToBlockForConnectionMultiplier 默認爲5 |
|
waitQueueTimeoutMS | 等待獲取連接最大超時時間,默認爲0,永不超時。 | |