Служба Fabri c во время выполнения не восстанавливает неиспользуемую память из экземпляра службы Actor - PullRequest
1 голос
/ 06 марта 2020

Наше приложение одним запросом создает одного актера в любом одном разделе, и для обработки одного запроса память увеличивается на 200-250 МБ во время выполнения актера, а после завершения выполнения я удалил актера

Task.Run(() =>
                        {
                            actorObject.ExecuteGrainAsync(requestId, jsonModel).ContinueWith(async (t) =>
                            {
                                await GrainFactory.DeleteActor(actorObject.GetActorId(), "Workflow", CancellationToken.None);
                            }); 
                        });


 IActorService myActorServiceProxy = ActorServiceProxy.Create(
                new Uri($"fabric:/APPSeConnect.WebAgent/{actorName}"), actorId);
                await myActorServiceProxy.DeleteActorAsync(actorId, cancellationToken);

В разделе нет активных действующих лиц, которых мы можем проверить, запросив fabri c, но память все равно блокируется на много минут (5 минут - более 50 минут). Позже размер памяти exe уменьшается всего на несколько МБ.

В соответствии с этим Документ память должна быть востребована во время выполнения в idealtimeout. Моя настройка:

new ActorGarbageCollectionSettings(10, 2)

Я тоже использую этот атрибут

[StatePersistence(StatePersistence.None)]

При параллельной обработке акторов это влияние огромно.

1 Ответ

1 голос
/ 12 марта 2020

Мы столкнулись с проблемой, аналогичной вашей, когда служба Actor Service не удаляет запрошенную память в течение 15 минут.

Контрольный пример имеет вид:

  1. Мы запрашиваем Актера и ждем, пока актер завершит свое выполнение.
  2. Заявленная память находится в сотнях мегабайт.
  3. После завершения выполнения Actor программно удаляется с использованием API DeleteActorAsync, как вы упомянули.
  4. Для параметров garbageCollection также установлено значение ActorGarbageCollectionSettings = new ActorGarbageCollectionSettings (10, 5).

Но в нашем случае вся память освобождается как минимум за 30 минут. Что заставляет нас думать, что, вероятно, это из-за поколения G C коллекции.

...