CPU alta intermitente (100%) no servidor de produção

5

X-Post do StackOverflow:

link

Temos um cluster da web com três servidores da Web, cada um com 24 núcleos e amp; 24 GB de mem.

Nossa aplicação é a mais recente do ASP.NET 4.0, Com o MVC3, no IIS 7.5 - Em seu próprio pool de aplicativos.

Muito intermitentemente, (talvez uma vez a cada 2/3 dias) um dos servidores da Web parará de atender solicitações, e todos os 24 núcleos mostrarão 100% da CPU (a memória e o disco parecem normais).

Nas vezes em que o gerenciador do IIS não está completamente congelado, as solicitações ativas em execução parecem não oferecer nenhuma informação útil, com uma distribuição bastante aleatória em um grande número de áreas / solicitações de site.

Uma vez que um servidor morreu, podemos retirá-lo da carga - e depois de talvez 5 minutos sem mais solicitações, a atividade da CPU voltará ao normal - fazendo-nos pensar que não é um loop infinito .

Um despejo de memória do processo de trabalho (cerca de 4 GB é tamanho!) não parece mostrar nenhum dos nossos códigos / namespaces em nenhum dos rastreamentos de pilha gerenciada - mas simplesmente. estou usando o WinDbg errado - e não carregando nossos símbolos corretamente - mas os rastreamentos de pilha não mostram nenhuma chamada de método ausente / sem nome - então estou bastante confuso)

Nossos servidores normalmente processam 1000 req / s com bastante alegria, então tudo isso é muito estranho.

Uma coisa estranha que notamos em Perfmon - foi a Taxa de Contenção / s vai para 800. Não temos nenhum código multi-thread em nosso aplicativo, e os únicos bloqueios que temos estão em nosso código de cache (que não mudou em idades).

Qualquer conselho / dicas sobre como diagnosticar ainda mais esse problema seria muito apreciado.

Felicidades.

    
por Dave 27.02.2012 / 14:00

3 respostas

6

Dave, Alguns pensamentos para começar:

Estou assumindo que é o w3wp.exe que está comendo seus recursos. Caso contrário, pode valer a pena executar alguns relatórios PAL para obter uma visão melhor sobre a integridade geral do servidor: link Às vezes, irei até mesmo executar o PAL, mesmo que seja um problema do IIS ... O PAL pode detectar todos os tipos de problemas que você nunca pensaria.

Verifique o Monitor de Desempenho (antes e durante o pico) ... tente descobrir se o seu Pedido de Aplicações ASP.Net / Sec é mais alto durante os períodos de "resposta lenta" ... Acho que é o caminho mais rápido para informar se você está lidando com mais solicitações do que o normal.

Tente descobrir se há uma (ou algumas) páginas que levam mais tempo para carregar. Certifique-se de que as estatísticas do IIS estão sendo registradas e, em seguida, procure um aumento no tempo necessário. Analisador de registro de check-out ( link ).

Ah, e não se esqueça do link do perfilador do StackExchange, depois de descobrir qual URL está causando o problema.

Além disso, não negligencie qualquer erro de .NET que você tenha no lugar: -)

Deixe-nos saber o que você vê. -Chris

    
por 27.02.2012 / 20:29
3

Use o DebugDiag 1.2 para realizar a análise do dump:

link

É útil estar ciente de que qualquer processo que seja capaz de usar mais de um thread pode empurrar a utilização para 100% em todos os processadores de um servidor. Isso inclui código nativo e até componentes principais do sistema operacional.

Quando você diz "patch mais recente", para mim isso significa com o Windows Update, que não recebe muitas correções de bugs mais graves para o Windows 2008 R2.

Em particular, se o aplicativo estiver acessando quaisquer arquivos em compartilhamentos remotos, seria uma boa ideia aplicar os hotfixes do sistema de arquivos:

Lista de hotfixes atualmente disponíveis para as tecnologias de serviços de arquivos no Windows Server 2008 e no Windows Server 2008 R2
link

    
por 27.02.2012 / 20:49
1

Verifique se está sendo segmentado por um ataque do HashDos e configure os limites de solicitações.

    
por 27.02.2012 / 14:03