Akka actor, как обрабатывать исключение нехватки памяти в threadpool

У меня есть базовая система акторов акка в оконном сервисе. Он выполняет несколько задач в системе. Один раз в месяц он выдает «Исключение нехватки памяти в Threadpool», после чего служба останавливается. Затем мне нужно перезапускать службу вручную каждый раз, когда это происходит.

В приведенном ниже коде показано, как я реализовал:

     _actorSystem =
                        ActorSystem.Create(_ACTOR_SYSTEM_NAME);
    _imageDownloadActor = 
                    _actorSystem.ActorOf<ImageDownloadActor>("ImageDownload");
    _imageResizeActor = 
                    _actorSystem.ActorOf<ImageResizeActor>("ImageResize");

    _imageImportActor = 
                    _actorSystem.ActorOf<ImageImportActor>("ImageImport");

void Process()
{
      _imageDownloadActor.DoProcess();
    _imageResizeActor.DoProcess();
    _imageImportActor.DoProcess();

}

Программа работает отлично - подхватывает процесс и корректно выполняет задания. Но, как я уже сказал выше, в какой-то момент он отключается, и мне приходится перезапускать вручную.

Кто-нибудь может посоветовать, где я ошибся в настройке системы акторов Akka? Могу ли я как-нибудь обработать исключение?

Попробуйте / поймайте его, если возникнут проблемы с памятью, перезапустите службу?

BugFinder 11.04.2018 12:48

Если я это сделаю, я потеряю сообщения актера. Это тоже вызовет у меня проблемы.

Tun 11.04.2018 17:37

Перед перезапуском вы можете сохранить очередь

BugFinder 12.04.2018 00:21
1
3
172
1

Ответы 1

Ваша проблема предполагает, что где-то в вашем приложении есть утечка памяти. Представленного вами фрагмента недостаточно для его идентификации.

Вполне вероятно, что где-то во время обработки сообщения вы сохраняете ссылку на объект / не освобождаете необходимый ресурс. Выделенная таким образом память начнет накапливаться, поскольку объект, на который указывает ссылка, никогда не будет собираться сборщиком мусора.

Другие вопросы по теме