O vazamento de memória do .NET pode causar exaustão de portas?

1

Nosso servidor da web tem tido um problema devido ao esgotamento da porta. Isso acontece a cada duas semanas e uma reinicialização resolve o problema. Mas eu quero chegar ao fundo desta questão e encontrar uma correção permanente para evitar as reinicializações.

Eu leio este artigo e foi muito útil. No entanto, menciona isso:

So, if you see a process that’s using up a lot of ports, talking to a single remote address or several remote addresses, and the state of the connection is something like TIME_WAIT, that’s usually a dead giveaway that this process is having a problem and not releasing those ports properly.

(ênfase minha)

Em seguida, mais abaixo está este parágrafo:

I mentioned above that memory leaks can cause this behavior too – why is that exactly? What happens is that in order to get a port to use for an outbound connection, processes need to acquire a handle to that port. That handle comes out of non-paged pool memory. So, if you have a memory leak, and you run out of non-paged pool, processes that need to talk to other machines on the network won’t be able to get the handle, and therefore won’t be able to get the port they need.

Perguntas :

  1. O que o autor quer dizer com não liberar essas portas corretamente ? De quem é esse trabalho, o programador?
  2. Alguém pode, por favor, explicar como um vazamento de memória pode causar exaustão de porta porque eu ainda não tenho certeza depois de ler o acima?

Uma última coisa a ter em mente é que eu sou um programador e não um administrador (se isso ajudar de alguma forma possível).

    
por CodingYoshi 12.03.2018 / 17:25

1 resposta

0

  1. Sim, é um trabalho do programador.
  2. Sim, vazamento de memória pode causar isso. A questão é se o soquete não foi fechado explicitamente só fecha quando a instância de um soquete ou outra classe derivada é destruído . Isso é feito por coleta de lixo automaticamente, mas não destruirá a instância de uma classe se houver pelo menos uma referência em algum lugar (vazamento de memória).

Pode ser bastante complicado descobrir o que mantém referências a instâncias e causa vazamento de memória. Pode ser segmentos que ainda estão em execução e manter referências em suas variáveis locais. Pode ser algum tipo de array usado para rastrear todas as conexões. Existem muitas possibilidades e todas dependem da implementação.

    
por 13.03.2018 / 10:16