0

` org.springframework.data.mongodb.UncategorizedMongoDbException: Out of semaphores to get db connection; 嵌套异常是 com.mongodb.DBPortPool$ SemaphoresOut: Out of semaphores to get db connection at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:70) at 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) 在 org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:633) 在 org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.

有什么办法解决这个问题?`

4

2 回答 2

2

你没有正确关闭连接。要么在插入调用周围的 try/finally 中关闭它,要么如果您的连接被注入,请确保它的范围限定为请求,并在该范围结束时关闭它。

于 2012-11-08T19:28:40.267 回答
1

你看过这个问题吗?有一个增加连接的配置选项,在此处描述。

另外,我建议阅读此问题以了解如何正确配置它。

从最后一个问题链接:

线程AllowedToBlockForConnectionMultiplier。如果池当前已用尽,则允许等待连接变为可用的线程数。这是将导致“com.mongodb.DBPortPool$SemaphoresOut: Out of semaphores to get db connection”异常的设置。一旦此线程队列超过threadsAllowedToBlockForConnectionMultiplier 值,它将抛出此异常。

如果您预计可能会导致大型队列的吞吐量峰值会暂时增加此值。正是出于这个原因,我们目前的价格为 1500。如果您的查询负载始终超过服务器,您应该相应地改善您的硬件/扩展情况。

于 2012-11-17T21:48:16.663 回答