Eu tenho cinco aplicativos em um Plano de Serviço de Aplicativo do Azure, todas as cópias diferentes do mesmo aplicativo para clientes diferentes. É um aplicativo ASP.NET MVC com um banco de dados SQL.
Hoje pela manhã, acordei em sites lentos e sem resposta, às vezes resultando em um erro 503. Ao verificar as métricas de CPU / Memória para o Plano de Serviço de Aplicativo, descobri que a CPU estava atrelada a 100%:
E o gráfico do tempo de CPU dos sites individuais mostra todos eles disparando ao mesmo tempo, embora alguns piores que outros:
Tentei resolver o problema realizando uma reinicialização avançada de aplicativos, mas o blade não carregava - presumo que estava tentando obter informações do servidor que não conseguiam responder.
No final, tentei parar cada um dos sites um a um, o que levou a CPU a zero e, em seguida, iniciá-los novamente, o que parecia ter resolvido o problema, mas agora alguns deles estão começando a subir novamente.
Ocorreu um problema semelhante há algumas semanas e presumi que estava crescendo muito para o meu App Plan, então atualizei de S1 para S2 e estava tudo bem até hoje.
Estou perplexo quanto a como descobrir qual é a causa desse comportamento de fome de CPU. Alguém pode me indicar a direção certa de como posso começar a diagnosticar isso?
fonte
Respostas:
Tivemos esse problema algumas vezes e, a cada vez, ele era executado como GC (coleta de lixo). É difícil provar e diagnosticar, mas o que acabo fazendo é usar o site kudo (scm), clicando em tools => support (que leva você ao site de suporte de aplicativos).
A partir daqui, você escolhe seu diretório (caso você tenha vários) e o site, clique em Analisar => Métricas e, em seguida, no botão Diagnosticar ( OBSERVAÇÃO isso já foi alterado para que essas etapas possam ser alteradas a qualquer momento) e depois em Analisar => Dianotics, você acabará recebendo um relatório de despejo de memória => "Status da análise". Este deve ser um arquivo mht (que você pode abrir no odioso navegador IE ou Edge) e, em seguida, procure a chave "gc".
você encontrará alguns quadros de pilha de chamadas interessantes com referências a coisas como "GCFrame" ou, mais interessante, chamadas para "System.Threading.WaitHandle.WaitMultiple" se você receber muitos desses, seu sistema pode estar tendo problemas com a coleta de lixo .
Como resolver isso ... esse é um tópico abordado em muitos outros tópicos porque é como perguntar "como eu vivo em um mundo com o IE 6 ainda em uso?" ...
fonte
Sua melhor aposta seria instalar o New Relic ou o Application Insights para este aplicativo em particular. Ele pode ser facilmente instalado através do Serviço de Aplicativo -> Ferramentas -> Monitoramento de Desempenho. Isso fornecerá uma visão detalhada do que está acontecendo no servidor e no cliente.
Artigo: Monitorar o desempenho do aplicativo Web do Azure
fonte