2012-11-08 31 views
0

` org.springframework.data.mongodb.UncategorizedMongoDbException:Out of信號量以獲得db連接;嵌套的例外是com.mongodb.DBPortPool $ SemaphoresOut:出信號燈的在org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:70) 獲得DB連接 在org.springframework.data.mongodb .core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1538) at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:370) at org.springframework.data.mongodb.core.MongoTemplate.insertDBObject (MongoTemplate.java:730) at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:633) at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:589 )MongoDB與彈簧數據 - 出信號量以獲得db連接

這是什麼修復? `

回答

2

你沒有正確關閉連接。或者在你的插入調用的try/finally中關閉它,或者如果你的連接被注入,請確保它的作用域是一個請求,並在範圍結束時關閉它。

1

你看這個question? 有一個配置選項來增加連接,描述爲here

此外,我建議您閱讀this question以瞭解如何正確配置它。

從鏈接的最後一個問題:

threadsAllowedToBlockForConnectionMultiplier。如果 池當前耗盡,允許等待連接變爲可用的線程數。這是會導致 「com.mongodb.DBPortPool $ SemaphoresOut:Out of semaphores獲取db 連接」異常的設置。一旦此線程 隊列超過threadsAllowedToBlockForConnectionMultiplier值,它將拋出此異常。

如果您預計吞吐量的大峯值可能導致大隊列 暫時增加此值。正因爲如此,我們目前在1500時纔有 。如果您的查詢負載一直超過 服務器,則應該相應地提高硬件/縮放比例 。