2012-11-08 35 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时才有 。如果您的查询负载一直超过 服务器,则应该相应地提高硬件/缩放比例 。