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.