Estou com um problema de desempenho em um site que criamos e não sei exatamente como começar a diagnosticá-lo.
A descrição resumida é: Temos um site muito pequeno ( http://hearablog.com ) com muito pouco tráfego, em um servidor dedicado de baixa qualidade, a CPU é sempre muito alta, às vezes permanece em 100% por minutos e w3wp.exe está tomando a maior parte. Um cenário típico é o w3wp.exe leva 60% e o SQL Server leva cerca de 30%. Nosso banco de dados também é bem pequeno.
Descrição longa e mais detalhes:
O site está hospedado em um servidor muito ruim por Cari.Net. Desde o início, tínhamos a sensação de que o servidor não se comportava corretamente, como algumas coisas levariam muito tempo, então isso poderia ser um problema de configuração desde o início. Também pode ser que tenhamos um servidor virtual enquanto deveríamos ter um servidor dedicado, embora não tenhamos evidências que indiquem isso, exceto pelo fato de o servidor tender a ser bastante lento.
O servidor é o Windows 2008 Standard de 64 bits, com o SQL 2008 Express
O hardware é uma Celeron de 2,80 GHz, 1 Gb de RAM
O site é desenvolvido no ASP.Net MVC, usando o Entity Framework para acesso a dados.
Agora, este é um hardware bastante ruim, mas já tive outros servidores com esses caras, com HW equivalente (ou pior), e o desempenho é muito melhor que este. Dito isto, os outros servidores têm W2003 e SQL2005, e estou usando o ASP.Net "WebForms" 2.0, sem MVC, sem LINQ, sem EF; portanto, não tenho certeza se ir para 2008 / outras coisas significa uma grande penalidade de desempenho.
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 fica em torno de 90%, mas o uso do disco parece indicar que não está paginando muito.
Recebo toneladas de e-mails todos os dias sobre o tempo limite do SQL, para consultas com duração superior a 30 segundos, embora todas as nossas consultas sejam bastante diretas (ou devam ser, mas a EF pode estar estragando tudo).
É assim que o monitor de recursos se parece em um desses "sprints" de 100% da CPU, caso haja algo útil lá.
E um instantâneo de alguns contadores de desempenho:
Agora, o que me confunde muito é que o uso da CPU do w3wp é tão alto. Na verdade, não deveria estar fazendo muito ... Então, minhas perguntas são ...
- Existe alguma maneira de descobrir "o que" está fazendo? Talvez até o perfil?
- Algum contador 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
fonte
Ok, para começar - o servidor é realmente ruim. Mas isso deve ser suficiente.
Para virtualização, verifique seus drivers. Não conheço nenhuma plataforma de virutalização que oculte a CPU (e eu acho que alguém coloca um hyper-v ou esx em um celeron), mas os drivers do disco etc. são uma indicação.
CPU não deve ser tão alta. Infelizmente, com essa memória RAM, você é praticamente um brinde - se você começar a adicionar um criador de perfil, irá praticamente explodir a memória que você tem.
Eu gostaria:
Para teste:
http://learn.iis.net/page.aspx/266/trou Troubleshooting-failed-requests-using-tracing-in-iis-7/
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 IO (segundos / leitura, segundos / gravação são praticamente os únicos relevantes). Todo o resto é IO muito vago - mas quando o 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 que não faz sentido IMHO ter uma máquina lá. Virtual seria melhor;)
fonte
Você pode tentar usar um programa chamado Process Explorer para monitorar segmentos individuais em execução no processo w3wp. Deve permitir que você veja qual thread está causando todo o dano.
fonte
Tive muita sorte usando a Ferramenta de Diagnóstico de Depuração da Microsoft para despejar meu processo w3wp e depois verificar os threads e rastrear os rastreamentos quanto a coisas que estavam travando. Dirá até a página solicitada que gerou o tópico, o que é SUPER legal .
http://www.microsoft.com/en-us/download/details.aspx?id=26798
fonte
Eu concordo com a TomTom na linha, especialmente sobre como obter uma melhor quilometragem de um Virtual neste momento. Depurar / criar um perfil localmente para diminuir o problema é a coisa certa a fazer.
Vou colocar meu chapéu e capa Karnak The Magnificent e pedir o primeiro envelope. Rebelião Ram. O que você ganha quando coloca o SO, ASP.NET e um SQL Server Express ganancioso em 1 GB.
Acredito que o seu problema é que o SQL Server Express está atraindo toda a RAM disponível para um Buffer Pool e demorando para liberá-lo. Consulte http://support.microsoft.com/kb/321363 para obter mais informações. Além disso, o IIS possui um cache padrão de 256 MB, que pode ser necessário ajustar ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). O Debug Diagnostics é uma ótima ferramenta para solucionar isso (ok, provavelmente uma marreta).
http://technet.microsoft.com/en-us/library/bb742546.aspx é um artigo bastante decente para se olhar. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e aponta para a reciclagem do pool de aplicativos enlouquecida como outro problema possível.
fonte
Use o contador "Processo" do Perfmon para ver os atributos individuais do processo w3wp.exe. Quanto tempo de CPU para o processo de trabalho é tempo de kernel? Os tempos altos do kernel podem ser indicativos de paginação, mas você diz que não está convencido. Outras possibilidades são duff drivers. O processo de trabalho tem 23 threads ativos, o que é bom, mas o que eles estão fazendo? Experimente o ProcessExplorer da SysInternals para pesquisar um pouco mais; você também pode ver quais conexões TCP / IP estão em jogo. Não usei o SQL Express, mas ele possui parâmetros de ajuste de memória, como seu irmão mais velho. O SQL está com fome no IIS de memória, causando paginação excessiva?
fonte
Pode não estar totalmente relacionado, mas verifique se você está usando NOLOCK em suas consultas. Pode ajudar no caso de tempos limite do SQL.
fonte