W3WP.EXE usando 100% CPU - por onde começar?

ASP.NET a aplicação web que corre no IIS6 dispara periodicamente a CPU até 100%. É o W3WP que é responsável por quase todo o uso da CPU durante estes episódios. A CPU fica presa a 100% em qualquer lugar de alguns minutos a mais de uma hora.

isto está num servidor de paragem e o site só está a receber muito tráfego de testadores neste ponto.

Estamos a analisar o perfil das formigas no servidor, mas tem sido pouco esclarecedor.

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

Author: Herb Caudill, 2010-01-13

9 answers

  1. contadores de desempenho padrão do Windows( Procure por outras actividades correlacionadas, tais como muitos pedidos de obtenção, rede excessiva ou disco I / O, etc.); pode lê-los a partir do código e do perfmon (para activar a recolha de dados se a utilização da CPU exceder um limiar, por exemplo)
  2. contadores de desempenho personalizados (especialmente para o tempo para pedidos fora de caixa e outras chamadas em que o tempo de execução é incerto)
  3. Teste de carga, utilizando ferramentas como o teste em equipa Visual Studio ou WCAT
  4. Se puder testar ou actualizar para o IIS 7, poderá configurar o Rastreio de pedidos falhados para gerar um traço se os pedidos demorarem mais tempo
  5. Usar o logparser para ver que pedidos chegaram no momento do Pico da CPU
  6. resenhas / passagens de código (em particular, procure por loops que não possam terminar corretamente, como se um erro acontecesse, bem como bloqueios e potenciais problemas de threading, como o uso de estática)
  7. CPU e perfil de memória (pode ser difícil num sistema de produção)
  8. Process Explorer
  9. Windows Resource Monitor
  10. registo de erros detalhado
  11. registo de vestígios personalizado, incluindo detalhes do tempo de execução (talvez condicional, com base no contador perf do CPU-use)
  12. Os erros acontecem quando o AppPool recicla? Se sim, pode ser uma pista.
 34
Author: RickNZ, 2010-01-13 10:04:30
Não é uma grande resposta, mas talvez precises de ir à moda antiga e capturar uma imagem do processo IIS e depurá-la. Você também pode querer verificar o blog da Tess Ferrandez ([3]) - Ela é uma engenheira de escalada 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 seleccionar o ASP.NET tag (que é o que eu tenho ligado), então você vai ver vários itens que são semelhantes.
 11
Author: Michael Bray, 2010-01-12 21:52:22
Se a sua CPU está a atingir os 100% e ficar lá, é muito provável que tenha um cenário de bloqueio ou um ciclo infinito. Um profiler parece ser uma boa escolha para encontrar um laço infinito. No entanto, os Deadlocks são muito mais difíceis de localizar.
 4
Author: user246874, 2010-01-12 21:50:24

Process Explorer é uma excelente ferramenta para resolução de problemas. Você pode tentar isso para encontrar o problema de alta CPU uso. Ele lhe dá uma visão sobre a forma como sua aplicação funciona.

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

 4
Author: sky100, 2014-03-02 14:10:37
Além disso, olha para os teus contadores perfmon. Eles podem dizer - te onde está a ser gasto muito tempo da cpu. Aqui está um link para os contadores mais comuns a usar:
 1
Author: RockySanders99, 2012-01-11 16:53:22
Tínhamos isto numa consulta recursiva que estava a despejar toneladas de dados para a saída. já verificaste tudo o que sai e não existem laços infinitos?

Pode tentar reduzi-lo com uma única página - encontramos FORMIGAS para não ajudar muito no mesmo caso - o que acabamos de fazer foi executando o site de uma página de relógio do CPU - visitas a próxima página do relógio do CPU - muito metódica e demorado, mas se você não pode encontrá-lo com algum código de rastreamento poderá ser fora da sorte -

Conseguimos usar ficheiros de Registo IIS para rastreá-lo até um conjunto de páginas suspeitas. Espero que isso ajude !
 0
Author: braindice, 2010-01-12 21:46:07

Isto é um palpite na melhor das hipóteses, mas talvez a sua equipa de desenvolvimento esteja a construir e a implantar a aplicação no modo de depuração, em vez do modo de libertação. Isto causará a ocorrência de .ficheiros pdb. A implicação disso é que a sua aplicação irá usar recursos adicionais para coletar informações de Estado do sistema e depuração durante a execução do seu sistema, causando mais Utilização do processador.

Por isso, seria suficientemente simples para garantir que estão a construir e a implantar modo de libertação.
 0
Author: Daffy Punk, 2016-12-30 19:09:27
Este é um post muito antigo, eu sei, mas também é um problema comum. Todos os métodos sugeridos são muito bons, mas eles sempre apontam para um processo, e há muitas chances de que já sabemos que o nosso site está fazendo problemas, mas só queremos saber que página específica está gastando muito tempo no processamento. Na minha opinião, o instrumento mais preciso e simples é o próprio IIS.
    Basta clicar no seu servidor no painel esquerdo do IIS.
  1. Clique em ' Trabalhador Processos na área principal. você já vê que pool de aplicação está tomando muito CPU.
  2. faça duplo-click nesta linha (eventualmente actualize, carregando em 'Mostrar tudo') para ver quais as páginas que consomem demasiado tempo de CPU ('tempo decorrido') coluna) neste conjunto
 -1
Author: men, 2017-09-12 14:44:26

Se identificar uma página que leva tempo a carregar, use o painel de desenvolvimento do SharePoint para ver que componente leva tempo.

 -2
Author: Jeff, 2014-03-02 14:12:16