У меня есть базовая система акторов акка в оконном сервисе. Он выполняет несколько задач в системе. Один раз в месяц он выдает «Исключение нехватки памяти в 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? Могу ли я как-нибудь обработать исключение?
Если я это сделаю, я потеряю сообщения актера. Это тоже вызовет у меня проблемы.
Перед перезапуском вы можете сохранить очередь
Ваша проблема предполагает, что где-то в вашем приложении есть утечка памяти. Представленного вами фрагмента недостаточно для его идентификации.
Вполне вероятно, что где-то во время обработки сообщения вы сохраняете ссылку на объект / не освобождаете необходимый ресурс. Выделенная таким образом память начнет накапливаться, поскольку объект, на который указывает ссылка, никогда не будет собираться сборщиком мусора.
Попробуйте / поймайте его, если возникнут проблемы с памятью, перезапустите службу?