Пн go ошибка соединения с ошибкой "состояние должно быть: открыто" - PullRequest
0 голосов
/ 17 апреля 2020

Я запускаю событие в системе акторов Akka, где мы запускаем несколько акторов для запроса mon go db и извлечения данных. Каждый актер запрашивает 1000 документов (размер каждого документа составляет 9 КБ)

При запуске события, которое требуется, чтобы 14 актеров запросили базу данных Mon go для получения 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 голосов
/ 20 апреля 2020

После запуска нескольких тестов и тщательного анализа журналов я обнаружил причину root. Ниже приведены подробности.

Пока приложение использует курсор для запроса данных из mongoDb, соединение было разорвано / закрыто. «State должно быть: open» жалуется на разорванное соединение.

В моем случае в моем приложении возникла OutOfMemory, что вызвало удаление компонентов и освобождение соединений. Вот график событий журнала для этой проблемы.

Так как это проблема с памятью для моего случая, исправление проблемы с памятью будет исправлено ниже исключения для меня.

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)
...