spring中配置mongo的最大連接數


這幾天一直在壓測服務器的性能問題,當並發量大時,服務器會報mong的錯誤:

Too many threads are already waiting for a connection. Max number of threads (maxWaitQueueSize) of 50 has been exceeded.
原來在我的配置文件中,沒有設置mongo連接的最大線程數,所以默認最大的為50

之前的配置如下

 

<!-- mongodb訪問實例工程類 -->
<mongo:db-factory host="${mongo.location}" port="${mongo.port}"
dbname="${mongo.dbName}" username="${mongo.username}" password="${mongo.password}" id="mongoDbFactory" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
新的配置如下


<!-- mongodb訪問實例工程類-->
<mongo:mongo host="${mongo.location}" port="${mongo.port}">
<mongo:options
connections-per-host="100"
threads-allowed-to-block-for-connection-multiplier="10"
connect-timeout="10000"
max-wait-time="120000"
auto-connect-retry="false"
socket-keep-alive="false"
socket-timeout="0"
slave-ok="false"
write-number="1"
write-timeout="0"
write-fsync="true"
/>
</mongo:mongo>
<mongo:db-factory mongo-ref="mongo"
dbname="${mongo.dbName}" username="${mongo.username}" password="${mongo.password}" id="mongoDbFactory" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>

各個參數說明:

#對mongo實例來說,每個host允許鏈接的最大鏈接數,這些鏈接空閑時會放入池中,如果鏈接被耗盡,任何請求鏈接的操作會被阻塞等待鏈接可用,推薦配置10
connectionsPerHost=10
#當鏈接空閑時,空閑線程池中最大鏈接數
minPoolsSize=5
#此參數跟connectionsPerHost的乘機為一個線程變為可用的最大阻塞數,超過此乘機數之后的所有線程將及時獲取一個異常.eg.connectionsPerHost=10 and threadsAllowedToBlockForConnectionMultiplier=5,最多50個線程等級一個鏈接,推薦配置為5
threadsAllowedToBlockForConnectionMultiplier=5
#一個線程等待鏈接可用的最大等待毫秒數,0表示不等待,負數表示等待時間不確定,推薦配置120000
maxWaitTime=120000
#鏈接超時的毫秒數,0表示不超時,此參數只用在新建一個新鏈接時,推薦配置10,000.
connectTimeout=10000
#此參數表示socket I/O讀寫超時時間,推薦為不超時,即 0 Socket.setSoTimeout(int)
socketTimeout=0
#該標志用於控制socket保持活動的功能,通過防火牆保持連接活着
socketKeepAlive=false
#true:假如鏈接不能建立時,驅動將重試相同的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
#com.jd.mongodbclient2.mongo.JDClientMongo.cursorFinalizerEnabled=true

#安全模式
com.jd.mongodbclient2.driver.MongoDBDriver.safe=true
#為true表示讀寫分離
com.jd.mongodbclient2.driver.MongoDBDriver.slaveOk=false

可參考官網:

http://docs.spring.io/spring-data/data-mongodb/docs/current/reference/html/
http://api.mongodb.org/java/current/com/mongodb/MongoOptions.html#connectionsPerHost
————————————————
轉載:https://blog.csdn.net/qazwsx081/article/details/50924352


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM