Uso excessivo de memória DNSCache Windows Server 2008 R2

2

Estamos tendo um problema com o serviço dnscache, em que o uso da memória está se tornando excessivo (~ 6 GB) após uma semana ou duas.

Reiniciar o serviço libera essa memória, mas não executa ipconfig / flushdns, um ipconfig / displaydns mostra aproximadamente 15 a 20 entradas no cache.

Verificamos e parece haver aproximadamente 150 consultas DNS por segundo, mas eu não esperava que isso tivesse o efeito de causar esse problema de memória.

Eu tentei procurar no MSDN por hotfixes ou relatórios de bugs, mas só encontrei uma referência a um vazamento de memória no Windows 2003. alguém pode sugerir como proceder.

    
por MikeT 04.10.2012 / 13:56

4 respostas

1

Fizemos uma captura Wireshark para ver o que o DNS consulta onde está sendo executado e acontece quando cada cliente envia dados para o servidor, está se conectando a um servidor MSSQL em outra máquina e executando uma consulta DNS para obter o IP endereço deste servidor SQL.

Como solução alternativa, configuramos o servidor de aplicativos com o endereço IP dos servidores SQL para que não haja necessidade de o servidor de aplicativos consultar o cache DNS.

No entanto, permanece a questão de por que, o que parecem ser consultas DNS normais, estão causando esse uso de memória no Cache DNS.

Eu incluí o rastreio do tubarão fio aqui para que as pessoas possam ajudar a diagnosticar o problema

    
por 05.10.2012 / 10:41
2

Como você já pesquisou por hotfixes, presumo que seu servidor já esteja atualizado com o Windows Service Pack mais recente e atualizado em todas as atualizações. Esse é sempre o melhor lugar para começar.

Com um tamanho de cache de 6 GB, estamos falando de dezenas de milhões de resultados de DNS únicos (o que é um absurdo). É improvável que seus clientes façam muitas consultas DNS exclusivas. Nos comentários da sua pergunta, você indicou que o aplicativo está realizando pesquisas toda vez que um cliente envia dados para o servidor. Não sei como o aplicativo (estou assumindo o aplicativo da web) funciona no seu servidor, mas gostaria de saber se algum evento está criando consultas DNS exclusivas com cada solicitação do cliente, consultas que são retornadas como domínios inexistentes. Eu suponho que, se a consulta DNS atingir um domínio com um caractere curinga, eles podem estar retornando respostas válidas. De qualquer forma, isso pode explicar o enorme tamanho do cache.

Ipconfig / displaydns nem sempre retorna o cache inteiro, o que explicaria por que você está vendo apenas 15 a 20 entradas.

Você pode (pelo menos eu posso) confirmar isso realizando o seguinte…

De um prompt do Powershell:

> ipconfig /flushdns
> [System.Net.Dns]::GetHostAddresses(“google.com”)

Confira o cache do DNS

> ipconfig /displaydns

Você provavelmente verá a entrada do Google.com. Anote o tamanho do cache usando o gerenciador de tarefas (no Gerenciador de Tarefas, localize o serviço dnscache, clique com o botão direito nele, selecione ir ao processo).

Agora, execute o seguinte comando, em que ### é um número grande (usei 10.000). Observe que configurei meu servidor DNS local para responder a todos os subdomínios .test com um caractere curinga, para não atingir 10.000 vezes o servidor DNS do ISPs em um curto período de tempo.

> $i = 0
> do {[System.Net.Dns]::GetHostAddresses(“blahblahfakedomain” + $i++ + “.test”)} while ($i –lt ###)

À medida que o comando é executado, observe a utilização da memória do processo de cache crescer no Gerenciador de Tarefas. Depois de concluído, confira o cache. Você provavelmente não verá os ### quires que acabamos de gerar, mas os processos do cache de DNS não liberaram a memória.

Em meus experimentos, consegui recuperar a memória ao liberar o cache do DNS (10.000 consultas é de aproximadamente 2 megas). Eu não sei porque isso não funciona para você. Talvez porque o cache é tão grande…?

De qualquer forma, proponho a seguinte solução alternativa:

Modifique os valores do Registro MaxCacheTtl e MaxNegativeCacheTtl na chave HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Dnscache \ Parâmetros por ( link ):

Modifique ou crie o valor DWord MaxCacheTtl , configurando-o para algo baixo, como 3600 segundos (0xE10 em hexadecimal). Todos os valores são especificados em segundos. O padrão é 1 dia (86.400 segundos).

Modifique ou crie o valor DWord MaxNegativeCacheTtl , definindo-o como 0.

Isso fará com que todos os registros sejam apagados do cache no máximo uma hora após serem adicionados. Resultados negativos (domínios inexistentes) não serão armazenados no cache (confirmei isso na área de trabalho do Windows 7).

Eu chamo isso de uma solução alternativa porque eu diria que o problema está em qualquer processo que esteja criando a quantidade absurda de solicitações. Se você puder, tente apagar a torrente de solicitações da fonte.

    
por 04.10.2012 / 22:44
1

Existem muitas discussões sobre a utilização de memória alta do DNS no Windows 2008 R2 flutuando. Muitos deles apontam para desabilitar o EDNS, o que não diminui o uso da memória. O problema real é, de fato, devido às portas que o DNS abre: 2500 UDP IPv4 e 2500 UDP IPv6. Este é um número agradável e redondo para um servidor DNS de produção ocupado, no entanto, para um DNS interno em um pequeno escritório isso é demais.

Para diminuir o número de portas abertas, execute o seguinte comando. Para um DNS interno, com cerca de 20 pessoas no escritório, 100 portas são mais do que suficientes:

Dnscmd /Config /SocketPoolSize 100

Quando o comando for executado, reinicie o serviço DNS; o consumo de memória deve diminuir.

Você também pode ver quantas portas você tem aberto:

Dnscmd /Info /SocketPoolSize
    
por 20.08.2013 / 18:47
0

Não tenho certeza se isso é tarde demais, mas me deparei com isso enquanto investigava uma questão totalmente diferente - acho que é o domínio .uk que foi a causa do problema.

Eles descrevem que uma correção simples de regkey resolverá isso.

link

Quando a resolução de nomes é fornecida por dicas de raiz, os servidores DNS do Windows Server 2008 DNS e do Windows Server 2008 R2 podem não conseguir resolver consultas de nomes em determinados domínios de nível superior. Quando isso acontece, o problema continuará até que o cache do servidor DNS seja limpo ou o serviço do servidor DNS seja reiniciado. O problema pode ser visto em domínios como .co.uk, .cn e .br, mas não está limitado a esses domínios.

Quando o problema está acontecendo, um comando nslookup emitido para um nome afetado retornará o erro "servidor falhou". Um rastreamento de rede mostrará que o servidor DNS não envia nenhum tráfego para tal solicitação à Internet. Nenhum evento relacionado a um problema é relatado no log de eventos DNS.

Esse problema não acontece se o Servidor DNS estiver configurado para usar encaminhadores para resolução de nomes da Internet em vez de dicas de raiz.

    
por 28.04.2013 / 07:15