Como você pode saber o que o w3wp.exe está fazendo? (ou como diagnosticar um problema de desempenho)

41

Estou tendo um problema de desempenho em um site que criamos e não sei exatamente como começar a diagnosticar.

A breve descrição é: Temos um site muito pequeno ( link ) com muito pouco tráfego, em um servidor dedicado ruim, a CPU é sempre muito alta, às vezes fica em 100% por minutos, e w3wp.exe está tomando a maior parte. Um cenário típico é w3wp.exe leva 60% e o SQL Server leva cerca de 30%. Nosso banco de dados também é muito pequeno.

Descrição detalhada e mais detalhes:

  • O site está hospedado em um servidor muito ruim pelo Cari.Net. Desde o início, tivemos a sensação de que o servidor não se comportava bem, como algumas coisas levariam muito tempo, então isso poderia ser um problema de configuração desde o início. também é que estamos recebendo um servidor virtual enquanto supostamente temos um servidor dedicado, embora não tenhamos evidências que indiquem isso, exceto pelo fato de que o servidor tende a ser muito devagar.

  • O servidor é o Windows 2008 Standard de 64 bits, com o SQL 2008 Express

  • O hardware é um Celeron de 2,80 GHz, 1 GB de RAM

  • O site é desenvolvido em ASP.Net MVC, usando o Entity Framework para acesso a dados.

  • Agora, este é um hardware muito ruim, mas eu tive outros servidores com esses caras, com equivalente (ou pior) HW, e o desempenho é muito melhor do que este. Dito isto, os outros servidores têm W2003 e SQL2005, e estou usando ASP.Net "WebForms" 2.0, sem MVC, sem LINQ, sem EF; então eu não tenho certeza se indo para 2008 / as outras coisas significa que uma grande penalidade de performance é esperada.

  • Estou servindo arquivos MP3 (5-20 Mb) regularmente, o que é uma carga um pouco incomum, talvez isso esteja causando algum tipo de problema?
    Isso faria com que o w3wp usasse muita CPU?

  • O uso do disco parece muito baixo. A memória é geralmente em torno de 90%, mas o uso do disco parece indicar que não está paginando muito.

  • Eu recebo toneladas de e-mails todos os dias sobre tempos limite de SQL, para consultas que levam mais de 30 segundos, embora todas as nossas consultas sejam bem diretas (ou deveriam ser, mas a EF pode estar parafusando acima).

É assim que o monitor de recursos se parece em um desses "sprints" de 100% da CPU, no caso de haver algo útil lá.

Euminstantâneodealgunscontadoresdedesempenho:

Agora, o que me confunde é que o uso de CPU do w3wp é muito alto. Não deveria estar fazendo muito ... Então minhas perguntas são ...

  • Existe alguma maneira de descobrir "o que" está fazendo? Talvez até mesmo perfil?
  • Quaisquer contadores de desempenho que eu deveria estar olhando?
  • Isso é esperado devido a essa configuração de hardware / software?
  • Isso pode ser causado por algum tipo de falha de configuração, onde você começaria a procurar?

Muito obrigado.
Daniel Magliola

    
por Daniel Magliola 27.10.2010 / 12:13

7 respostas

40

Você também pode usar a UI de Processos de Trabalho no Gerenciador do IIS e inspecionar as solicitações que estão sendo executadas no momento e ver onde elas estão ficando presas, se houver. Abra o Gerenciador do IIS - > Clique no Servidor na Árvore - > Clique duas vezes no ícone Processos de trabalho - > Clique duas vezes no Processo de trabalho que está consumindo a CPU para ver as solicitações atualmente em execução em tempo real para ver qual módulo está tempo.

Considere também o uso do Rastreamento de solicitação com falha para rastrear parte do tempo por solicitação para ver onde eles estão demorando muito tempo.

    
por 27.10.2010 / 22:01
5

Ok, para começar - o servidor está realmente ruim. Mas deve ser o suficiente.

  • Para virtualização, verifique seus drivers. Eu não conheço nenhuma plataforma de virutalização que esconda a CPU (e eu digo que alguém coloca um hyper-v ou esx em um celeron) mas os drivers para o disco etc. são uma indicação.

  • A CPU não deve ser tão alta. Infelizmente, com esta memória RAM, você está quase brindando - se você começar a adicionar um profiler, você vai explodir a memória que você tem.

Eu gostaria de:

  • Verifique se os registros estão sendo executados neste momento.
  • Atualize o sistema operacional para 2008 R2 - muito mais informações estão disponíveis lá.

Para testes:

  • Em seu ambiente de desenvolvimento, faça uma cópia do site e execute alguns testes de desempenho.
  • Faça o perfil lá.
  • Use o Rastreamento de REquest com falha para descobrir quais solicitações falham.

link

tem algum começo por aí. Isso pode lhe dar uma dica, caso os problemas sejam mais - hm - "categorizáveis".

Eu também manteria registros de desempenho de longo prazo. Cuidado com o seu IO (segundos / leitura, segundos / gravação são os únicos relevantes). Todo o resto é IO sábio muito vago - mas uma vez que seu IO começa a demorar mais do que deveria, os discos ficam para trás.

Eu descartaria um problema de configuração neste momento - pelo menos como indicador principal. Algo usa seus recursos do W3p, agora você precisa descobrir o que é.

Em geral, este não é um servidor que eu adoraria ter físico - é tão pequeno, não faz sentido IMHO ter uma máquina lá. Virtual seria melhor;)

    
por 27.10.2010 / 12:47
4

Você pode tentar usar um programa chamado Process Explorer para monitorar threads individuais em execução no w3wp processo. Ele deve permitir que você veja qual segmento está causando todos os danos.

    
por 27.10.2010 / 21:04
3

Eu tive muita sorte usando a Ferramenta de Diagnóstico de Depuração da Microsoft para despejar meu processo w3wp e, em seguida, verificar os encadeamentos e os rastreamentos de pilha para os itens que estavam sendo bloqueados. Ele até informa a página solicitada que gerou o tópico SUPER nice .

link

    
por 06.09.2012 / 03:33
1

Concordo com a TomTom no final das contas, especialmente sobre como melhorar a quilometragem de um Virtual neste momento. A depuração / criação de perfil localmente para diminuir o problema é a coisa certa a se fazer.

Vou colocar meu chapéu e capa do Karnak The Magnificent e pedir o primeiro envelope. Rebelião de Ram. O que você ganha quando coloca o SO, o ASP.NET e um SQL Server Express em 1GB.

Acredito que o seu problema é que o SQL Server Express está obtendo toda a RAM disponível para um Buffer Pool e demorando para liberá-lo. Consulte o link para obter mais informações. Além disso, o IIS tem um cache padrão de 256 MB, que talvez seja necessário ajustar ( link ). O Debug Diagnostics é uma ótima ferramenta para solucionar problemas (ok, provavelmente uma marreta).

link é um artigo bastante interessante de se ver. link aponta para a reciclagem de pools de aplicativos enlouquecida como outro problema possível.

    
por 27.10.2010 / 13:37
1

Use o contador "Process" do Perfmon para ver os atributos individuais do processo w3wp.exe. Quanto do tempo de CPU para o processo de trabalho é a hora do kernel? Tempos de kernel altos podem ser indicativos de paginação, mas você diz que não está convencido. Outras possibilidades são os drivers duff. O processo de trabalho tem 23 segmentos ativos, o que é bom, mas o que eles estão fazendo? Experimente o ProcessExplorer da SysInternals para explorar um pouco mais; Você também pode ver quais conexões TCP / IP estão em jogo. Eu não usei o SQL Express, mas ele tem parâmetros de ajuste de memória, como seu irmão mais velho. A SQL está privando o IIS da memória, causando paginação excessiva?

    
por 27.10.2010 / 20:58
0

Pode não estar totalmente relacionado, mas verifique se você está usando o NOLOCK em suas consultas. Isso pode ajudar no caso dos tempos limite do SQL.

    
por 30.11.2010 / 18:16