spring 集成MongoDB錯誤Interrupted acquiring a permit to retrieve an item from the pool

使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章