欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring 集成MongoDB错误Interrupted acquiring a permit to retrieve an item from the pool

程序员文章站 2022-04-30 21:10:07
...

使用MongoDB存储监控相关信息,偶尔会出现下面这个错误,无法从连接池获取MongoDB的链接信息,从错误提示上就是连接池不能使用了,但是有时候会成功,有时候会失败,这里记录一下失败的原因。

参考链接

mongoDB 常见三种异常解析 (附配置)
Exception: Interrupted acquiring a permit to retrieve an item from the pool

看了上面两个文章之后,就想到了可能是应用程序已经结束了,但是还有线程在使用MongoDB的连接,因此检查程序是否结束了,还有其他应用在使用MongoDB连接池。

解决思路

  • 如果运行的main方式或者单元测试之类的,检查方法执行完之后是否还有其他任务在执行,尤其是使用多线程的时候需要检查,如果不好查找可以在主线程睡眠几十秒看看效果。

我的问题

我的问题主要是使用线程池去执行任务,线程池里面的任务还没执行完,主线程已经结束了,因为主线程把任务放到线程池之后就结束了,并没有等线程池执行完,所以主线程结束了,线程池还在执行,主线程执行了之后spring管理的bean也就都销毁了。

异常信息

com.mongodb.MongoInterruptedException: Interrupted acquiring a permit to retrieve an item from the pool 
	at com.mongodb.internal.connection.ConcurrentPool.acquirePermit(ConcurrentPool.java:203) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.ConcurrentPool.get(ConcurrentPool.java:140) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.ConcurrentPool.get(ConcurrentPool.java:123) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.PowerOfTwoBufferPool.getBuffer(PowerOfTwoBufferPool.java:78) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:105) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:588) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:445) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:299) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:259) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:99) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:450) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:72) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:218) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:269) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:131) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.operation.MixedBulkWriteOperation.executeCommand(MixedBulkWriteOperation.java:435) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.operation.MixedBulkWriteOperation.executeBulkWriteBatch(MixedBulkWriteOperation.java:261) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.operation.MixedBulkWriteOperation.access$700(MixedBulkWriteOperation.java:72) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:205) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:196) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.operation.OperationHelper.withReleasableConnection(OperationHelper.java:501) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:196) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:71) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:206) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.client.internal.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:1048) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.client.internal.MongoCollectionImpl.executeInsertOne(MongoCollectionImpl.java:498) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:482) [mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:476) [mongo-java-driver-3.11.2.jar:na]
	at com.madman.springbootdemo.mybatisInterceptor.SqlCostReporterThread.run(SqlCostReporterThread.java:27) [classes/:na]
	at com.madman.springbootdemo.mybatisInterceptor.SqlCostReporterThread$$FastClassBySpringCGLIB$$25d598df.invoke(<generated>) [classes/:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) [spring-core-5.2.3.RELEASE.jar:5.2.3.RELEASE]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:769) [spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747) [spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) [spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_181]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_181]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_181]
	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_181]
Caused by: java.lang.InterruptedException: null
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1302) ~[na:1.8.0_181]
	at java.util.concurrent.Semaphore.acquire(Semaphore.java:312) ~[na:1.8.0_181]
	at com.mongodb.internal.connection.ConcurrentPool.acquirePermit(ConcurrentPool.java:199) ~[mongo-java-driver-3.11.2.jar:na]
	... 38 common frames omitted