Проблемы с утечкой памяти в приложении signalr .net6

После размещения приложения на модуле Linux IIS или AKS, когда мы установили соединение с определенным концентратором сигналов, мы заметили, что его память автоматически увеличивается после выполнения той же операции, что и просмотр списка пользователей. Если мы выполняем одну и ту же операцию несколько раз, мы видим каждый раз память увеличивается. После установления соединения с концентраторами сигналов мы также используем Rebus для оставшейся связи.

private staticBuildinHandlerActivator _adapter = newBuildinHandlerActivator(); частный ILog _logger только для чтения = LogManager.GetLogger(typeof(RebusWeb));

public RebusWeb(концентратор IHubContext) { пытаться { конфигурация var = новый ConfigurationBuilder().AddJsonFile($"appsettings.json"); вар конфигурации = Configuration.Build(); RebusConfigSettings.AppSettingsConfigure(конфигурация); _adapter.Register(() => new HubHandler(hub)); вар конфигуратор = Конфигурировать.С(_адаптер) .Options(o => { o.SetNumberOfWorkers(RebusConfigSettings.Workers); o.RetryStrategy(maxDeliveryAttempts: RebusConfigSettings.RetryAttempts); }) .Logging(l => l.Log4Net()) .Serialization(s => s.UseNewtonsoftJson(JsonInteroperabilityMode.PureJson)) .Routing(r => { вар маршрутизация = r.TypeBased(); var routers = config.GetSection("AppRouting").Get<List>(); //routers.ForEach(sub => маршрутизация.Map(sub.Message.GetType(), sub.Endpoint)); foreach (var router в маршрутизаторах) { если (router.Message.Contains(",")) { вар сообщение = Type.GetType(router.Message); маршрутизация.Карта(сообщение, маршрутизатор.Конечная точка); } еще { вар сборка = Assembly.Load(router.Message); типы вар = сборка.GetTypes(); foreach (тип var в типах) {

                             if (type.IsSubclassOf(typeof(MessageModel)))
                             {
                                 routing.Map(type, router.Endpoint);
                             }
                         }
                     }
                 }
             })
             .Events(x =>
             {
                 x.BeforeMessageSent += (bus, headers, message, context) =>
                 {
                     if (RebusConfigSettings.TimeToBeReceived != "-1")
                     {
                         headers.Add(Headers.TimeToBeReceived, RebusConfigSettings.TimeToBeReceived);
                         headers.Add(Headers.Express, "rebus-express");
                     }
                 };
             });

    string azureServiceBusUrl = EnvironmentVariablesManager.GetEnvironmentVariable("AzureServiceBusUrl");
    if (!string.IsNullOrWhiteSpace(azureServiceBusUrl))
    {
        var enableCompression = EnvironmentVariablesManager.GetEnvironmentVariable("EnableMessageCompression");
        if (!string.IsNullOrEmpty(enableCompression) && string.Compare(enableCompression, "true", StringComparison.OrdinalIgnoreCase) == 0)
            configurer = configurer.Options(o => o.EnableCompression(RebusConfigSettings.MessageCompressionSize));
        configurer.Transport(t => t.UseAzureServiceBus(azureServiceBusUrl, RebusConfigSettings.InputQueue).AutomaticallyRenewPeekLock()).Start();
    }
}
catch (Exception ex)
{
    _logger.Error(ex);
}
Авдей
Вопрос задан24 августа 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.