Pergunta

Um aplicativo Web ASP.NET em execução no IIS6 atira periodicamente na CPU até 100%. É o W3WP que é responsável por quase todo o uso da CPU durante esses episódios. A CPU permanece presa a 100% em alguns minutos a mais de uma hora.

Isso está em um servidor de estadiamento e o site está obtendo apenas tráfego muito leve dos testadores neste momento.

Nós executamos o Profiler de formigas no servidor, mas não foi iluminado.

Onde podemos começar a descobrir o que está causando esses episódios e que código está mantendo a CPU ocupada durante todo esse tempo?

Foi útil?

Solução

  1. Contadores de desempenho padrão do Windows (procure outras atividades correlacionadas, como muitas solicitações, E/S de rede ou disco excessivo, etc.); Você pode lê -los a partir do código e também do Perfmon (para acionar a coleta de dados se o uso da CPU exceder um limite, por exemplo)
  2. Contadores de desempenho personalizados (particularmente ao tempo para solicitações off-box e outras chamadas onde o tempo de execução é incerto)
  3. Teste de carga, usando ferramentas como teste de equipe do Visual Studio ou WCAT
  4. Se você pode testar ou atualizar para o IIS 7, pode configurar o rastreamento de solicitação com falha para gerar um rastreamento se solicitações levarem mais uma certa quantidade de tempo
  5. Use LogParser para ver quais solicitações chegaram no momento do Spike da CPU
  6. Revisões de código / passo a passo (em particular, procure loops que não possam terminar adequadamente, como se um erro acontecer, bem como bloqueios e possíveis problemas de rosqueamento, como o uso de estática)
  7. CPU e perfil de memória (podem ser difíceis em um sistema de produção)
  8. Process Explorer
  9. Monitor de recursos do Windows
  10. Log de erro detalhado
  11. Registro de rastreamento personalizado, incluindo detalhes do tempo de execução (talvez condicional, com base no contador de perf-us-up de CPU)
  12. Os erros estão acontecendo quando o Apppool recicla? Nesse caso, pode ser uma pista.

Outras dicas

Não é muita resposta, mas você pode precisar ir para a velha escola e capturar uma foto instantânea do processo do IIS e depurar. Você também pode querer conferir Tess FerrandezBlog - Ela é um engenheiro de escalação da Microsoft e seu blog se concentra em depurar o Windows ASP.net, mas o blog é relevante para a depuração do Windows em geral. Se você selecionar a tag ASP.NET (que é a que eu vinculei), verá vários itens semelhantes.

Se a sua CPU estiver aumentando para 100% e fica lá, é bem provável que você tenha um cenário de impasse ou um loop infinito. Um perfilador parece ser uma boa escolha para encontrar um loop infinito. Os impasses são muito mais difíceis de rastrear, no entanto.

Process Explorer é uma excelente ferramenta para solução de problemas. Você pode tentar para encontrar o problema da alta CPU uso. Ele fornece uma visão da maneira como seu aplicativo funciona.

Você também pode tentar Procdump Para despejar o processo e analisar o que realmente aconteceu na CPU.

Além disso, olhe para seus contadores de perfmon. Eles podem lhe dizer onde está gasto muito tempo com a CPU. Aqui está um link para os contadores mais comuns para usar:

Tivemos isso em uma consulta recursiva que estava despejando toneladas de dados na saída - você verificou que tudo o que sai e não existem loops infinitos?

Pode tentar reduzi -lo com uma única página - descobrimos que as formigas também não ajudam muito no mesmo caso - o que acabamos fazendo foi executar o site para atingir uma página assistir à CPU - pressione a próxima página relógio CPU - muito metódico e demorado, mas se você não conseguir encontrá -lo com algum rastreamento de código, pode estar sem sorte -

Conseguimos usar arquivos de log do IIS para rastreá -los em um conjunto de páginas suspeitas -

Espero que ajude !

Este é um palpite, na melhor das hipóteses, mas talvez sua equipe de desenvolvimento esteja construindo e implantando o aplicativo no modo de depuração, em vez do modo de liberação. Isso causará a ocorrência de arquivos .pdb. A implicação disso é que seu aplicativo ocupará recursos adicionais para coletar o estado do sistema e depurar informações durante a execução do seu sistema, causando mais utilização do processador.

Portanto, seria simples o suficiente para garantir que eles estejam construindo e implantando no modo de liberação.

Este é um post muito antigo, eu sei, mas também é um problema comum. Todos os métodos sugeridos são muito agradáveis, mas sempre apontam para um processo, e há muitas chances de já saber que nosso site está causando problemas, mas queremos saber qual página específica está gastando muito tempo no processamento. A ferramenta mais precisa e simples, na minha opinião, é o próprio IIS.

  1. Basta clicar no seu servidor no painel esquerdo do IIS.
  2. Clique em 'Processos dos trabalhadores' no painel principal. Você já vê qual pool de aplicativos está tomando muita CPU.
  3. Clique duas vezes nesta linha (eventualmente atualize clicando em 'Mostrar tudo') para ver quais páginas consomem muito tempo da CPU ('Time decorrido' coluna) neste pool

Se você identificar uma página que leva tempo para carregar, use o SharePoint's Painel de desenvolvedor Para ver qual componente leva tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top