Mongo Connection问题,错误为“状态应为:打开”

时间:2020-04-17 18:16:47

标签: java mongodb akka

我正在Akka actor系统中运行一个事件,在该系统中,我们运行多个actor以查询mongo db并检索数据。每个参与者查询1000个文档(每个文档的大小为9kb)

在运行一个需要解雇14个演员来查询Mongo DB以检索13000个文档的事件时,一旦遇到以下异常,不知道为什么吗?以前有没有人经历过?

2020-04-14 19:17:28,818 [erp-writer-actor-system-akka.actor.default-dispatcher-378] ERROR c.a.s.c.m.GlobalContextMongoClientService- 76cd7a80-83ef-4389-885a-be9caed77449 - Exception occured while reading data from cursor
java.lang.IllegalStateException: state should be: open
 at com.mongodb.assertions.Assertions.isTrue(Assertions.java:70)
 at com.mongodb.connection.DefaultServer.getConnection(DefaultServer.java:84)
 at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.getConnection(ClusterBinding.java:86)
 at com.mongodb.operation.QueryBatchCursor.getMore(QueryBatchCursor.java:203)
 at com.mongodb.operation.QueryBatchCursor.hasNext(QueryBatchCursor.java:103)
 at com.mongodb.MongoBatchCursorAdapter.hasNext(MongoBatchCursorAdapter.java:46)
 at com.xyz.smartconnect.commons.mongoclient.GlobalContextMongoClientService.findWorkers(GlobalContextMongoClientService.java:145)
 at com.xyz.smartconnect.actors.QueryWorkersActor.lambda$createReceive$0(QueryWorkersActor.java:40)
 at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:26)
 at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:21)
 at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
 at akka.japi.pf.UnitCaseStatement.applyOrElse(CaseStatements.scala:21)
 at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:170)
 at akka.actor.Actor$class.aroundReceive(Actor.scala:513)
 at akka.actor.AbstractActor.aroundReceive(AbstractActor.scala:132)
 at akka.actor.ActorCell.receiveMessage(ActorCell.scala:519)
 at akka.actor.ActorCell.invoke(ActorCell.scala:488)
 at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
 at akka.dispatch.Mailbox.run(Mailbox.scala:224)
 at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
 at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
 at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
 at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
 at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
 Suppressed: java.lang. IllegalStateException: state should be: open
  at com.mongodb.assertions.Assertions.isTrue(Assertions.java:70)
  at com.mongodb.connection.DefaultServer.getConnection(DefaultServer.java:84)
  at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.getConnection(ClusterBinding.java:86)
  at com.mongodb.operation.QueryBatchCursor.killCursor(QueryBatchCursor.java:261)
  at com.mongodb.operation.QueryBatchCursor.close(QueryBatchCursor.java:147)
  at com.mongodb.MongoBatchCursorAdapter.close(MongoBatchCursorAdapter.java:41)
  at com.xyz.smartconnect.commons.mongoclient.GlobalContextMongoClientService.findWorkers(GlobalContextMongoClientService.java:149)

1 个答案:

答案 0 :(得分:0)

运行多个测试并仔细分析日志后,我找到了根本原因。下面是详细信息。

虽然应用程序使用游标从mongoDb查询数据,但连接已释放/关闭。 “状态应为:打开”正在抱怨连接已释放。

就我而言,我的应用程序遇到了OutOfMemory,这导致处置Bean和释放连接。这是此问题的日志事件的时间表。

由于这是我的记忆问题,因此解决内存问题将为我解决以下异常情况。

2020-04-19 12:57:32,981 [xyz-actor-system-akka.actor.default-dispatcher-72] ERROR a.a.ActorSystemImpl-  - 413f9298-ca92-4744-913b-59934e4ce831 - exception on LARS’ timer thread
java.lang.OutOfMemoryError: GC overhead limit exceeded
    at akka.actor.LightArrayRevolverScheduler$$anon$4.nextTick(LightArrayRevolverScheduler.scala:269)
    at akka.actor.LightArrayRevolverScheduler$$anon$4.run(LightArrayRevolverScheduler.scala:235)
    at java.lang.Thread.run(Thread.java:748)
2020-04-19 12:57:43,649 [Thread-19] INFO  o.s.c.s.DefaultLifecycleProcessor-  -  - Stopping beans in phase 2147483647
2020-04-19 12:58:13,483 [Thread-19] INFO  o.s.j.e.a.AnnotationMBeanExporter-  -  - Unregistering JMX-exposed beans on shutdown
2020-04-19 12:58:45,186 [localhost-startStop-2] INFO  c.a.s.ApplicationContextListener-  -  - >>>>>>>>> Disposing beans
2020-04-19 12:59:00,182 [localhost-startStop-2] INFO  c.a.s.c.SpringBeanDisposer-  -  - Mongo connections are released.
2020-04-19 12:59:09,591 [xyz-actor-system-akka.actor.default-dispatcher-73] ERROR c.a.s.c.m.GlobalContextMongoClientService-  - 413f9298-ca92-4744-913b-59934e4ce831 - Exception occured while reading data from cursor
java.lang.IllegalStateException: state should be: open
    at com.mongodb.assertions.Assertions.isTrue(Assertions.java:70)
    at com.mongodb.connection.DefaultServer.getDescription(DefaultServer.java:114)
    at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.getServerDescription(ClusterBinding.java:81)
    at com.mongodb.operation.QueryBatchCursor.initFromCommandResult(QueryBatchCursor.java:251)
    at com.mongodb.operation.QueryBatchCursor.getMore(QueryBatchCursor.java:207)
    at com.mongodb.operation.QueryBatchCursor.hasNext(QueryBatchCursor.java:103)
    at com.mongodb.MongoBatchCursorAdapter.hasNext(MongoBatchCursorAdapter.java:46)
相关问题