Signalr: Vazamento de memória

Criado em 2 nov. 2015  ·  9Comentários  ·  Fonte: SignalR/SignalR

Após 3 meses que meu host self signlar foi executado, descobri que o processo obtém 1,5 gigabyte de memória. Usamos a versão 2.1.1 do signalr.
Eu verifiquei com a memória Dot e descobri que Microsoft.AspNet.SignalR.Messaging.DefaultSubscription está obtendo mais memória e não libera.

Isso é vazamento de memória?

Comentários muito úteis

Em segundo lugar. Parece que ele preenche a memória com strings como hc-Realtime.20e13545-e77c-4873-9d55-fe9c14e3a058
(o guid varia de acordo com a instância, é claro), mas após alguns minutos de criação de perfil, tenho algumas centenas de instâncias de string iguais às que estão na memória

memleak

parece que esta memória é retida quando o cliente é desconectado (pelo menos parcialmente). Mas como em nosso cenário os clientes estão conectados por um longo tempo (geralmente você pode dizer 24 horas por dia, 7 dias por semana), o estresse da memória está aumentando constantemente.

Todos 9 comentários

untitled

Em segundo lugar. Parece que ele preenche a memória com strings como hc-Realtime.20e13545-e77c-4873-9d55-fe9c14e3a058
(o guid varia de acordo com a instância, é claro), mas após alguns minutos de criação de perfil, tenho algumas centenas de instâncias de string iguais às que estão na memória

memleak

parece que esta memória é retida quando o cliente é desconectado (pelo menos parcialmente). Mas como em nosso cenário os clientes estão conectados por um longo tempo (geralmente você pode dizer 24 horas por dia, 7 dias por semana), o estresse da memória está aumentando constantemente.

Qual o tamanho das mensagens?

estamos tentando mantê-los pequenos - na última execução, em média 300 caracteres (carga útil), com no máximo 1742 caracteres (enviamos apenas strings simples, sem json no lado do sinal), às vezes chega a dizer 5k

image

Parece que tenho o mesmo problema (v2.2.0). Em execução agora há três dias, e as instâncias de DefaultSubscription estão aumentando constantemente.

Estamos enfrentando o mesmo problema aqui. Como consertar esse tipo de problema? (Vazamento de memória)

Esse perfil de traço de pontos original parece suspeito. Por que existem tantas instâncias de barramento de mensagem. Deve haver um.

Estamos vendo o mesmo aqui. (v2.2.0)

Meus testes mostram que parece estar relacionado à memória fixada que o GC não consegue coletar. Quando nosso aplicativo é exposto a 1 ou 2 mil clientes que se conectam em um curto período de tempo, a memória parece ser fixada muito rapidamente. Eu até recebi algumas OutOfMemoryExceptions em horários de pico.

O criador de perfil das formigas mostra que a memória não utilizada alocada para .NET está crescendo de forma estável. Ele aponta para a matriz de bytes usada em Microsoft.AspNet.SignalR.Messaging.Message

ants_profile_signalrapp

Como podemos contornar isso? É possível ajustar o tamanho do buffer inicial ou o tamanho do bloco da mensagem por meio da API ou algo parecido?

Esse problema foi resolvido como parte da limpeza do problema, conforme descrito em https://blogs.msdn.microsoft.com/webdev/2018/09/17/the-future-of-asp-net-signalr/. Se você ainda estiver enfrentando esse problema, sinta-se à vontade para reabrir e comentar para nos informar! Ainda estamos interessados ​​em ouvir de você, o backlog ficou um pouco grande e tivemos que fazer uma limpeza em massa para voltar ao topo das coisas. Obrigado por seu feedback contínuo!

Esta página foi útil?
0 / 5 - 0 avaliações