Melhorando a performance do IIS 4.0 Problema: performance de site rodando MS Internet Information Server 4.0 ruim em determinados momentos. Sintomas: o site não responde prontamente aos requests de páginas ASP ou HTML, porém não chega a travar o serviço Web. Não existe um motivo claro para tal comportamento; dificuldade em isolar o problema. O desempenho do site independe do número de usuários conectados. Possível causa: os requests das páginas estão sendo colocados na fila de execução do IIS mas estão demorando muito para serem processados. O sistema não está conseguindo responder aos requests tão rápido quanto chegam novos requests. Como monitorar: utilizando o Performance Monitor, selecionar os seguintes contadores para análise de performance: Processador: % Processor Time (para cada processador) ActiveServerPages: Requests/Sec, Requests Executing, Requests Queued HttpService: Connections/Second, Current Anonymous Users Observar principalmente o contador Requests Queued. Ele representa o número de requests que estão na fila do IIS para serem processados. Em um site otimizado este número estará sempre muito próximo de zero. Caso a fila esteja aumentando e diminuindo e/ou o número de Requests Queued seja maior do que o número de Requests Executing, o site enfrentará problemas de performance. Isso explica o fato do site não necessariamente perder performance quando o número de usuários é maior, porque o problema depende de quais requests os usuários estão fazendo naquele momento e não do número de usuários conectados (pois eles podem não estar fazendo nada naquele momento). Solução: Caso constate-se que o problema seja a fila de processamento de requests, existem 2 aspectos a serem considerados: Se o processador está operando a mais de 70% do tempo isto significa a necessidade de um aumento da capacidade do processador ou aumento do número de processadores. Se o processador estiver operando a maior parte do tempo abaixo de 50% da capacidade isto indica que algum ou alguns dos requests estão bloqueando o processamento de outros. Neste caso, aumente o número de threads do processador de 10 (default) para 20 (números decimais). Para fazer isso, modifique o valor da chave ProcessorThreadMax para 20 (dec) (Reg Dword) em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\ASP\Parameters (a chave não será apresentada por default). Depois, dar um boot no servidor e verificar o comportamento da fila e do processador. Se a fila diminuir, mas não o suficiente, e o processador ainda estiver com capacidade para suportar um número maior de threads (abaixo de 70%), aumentar o valor de ProcessorThreadMax de 10 em 10 até atingir uma valor adequado para a fila e a capacidade do processador (o valor máximo não deve ultrapassar 100). Testar em horários de pico. Caso o comportamento da fila piore após essas modificações, isso significa um sério problema de bloqueamento de requests . Neste caso, voltar a configuração para os valores anteriores e rever o código da aplicação. Alguns Best Practices para desenvolvimento de sites: Realizar testes de capacidade do site antes de colocá-lo em produção. Estressar ao máximo a capacidade das máquinas. Realizar testes em cada uma das consultas ao Banco de Dados que fazem parte da aplicação do site; geralmente algumas dessas consultas acabam causando a demora na resposta aos requests. Preferir várias consultas SQL simples ao invés de poucas consultas complexas. Otimizar o código (ver documentos listados abaixo). Ter uma excelente máquina para o Banco de Dados. Se um único servidor Web não seja o suficiente para atender a demanda, utilizar Windows Load Balancing Services. Monitorar sempre. Documentação: existem diversos parâmetros que podem ser configurados para melhorar a performance geral de um site rodando IIS. A seguir serão listados os documentos publicados na Web ou no Technet que informam em detalhes quais são esses parâmetros e como configurá-los, além de dicas de desenvolvimento e ferramentas para análise de capacidade: Monitoramento e aperfeiçoamento de performance: Tuning Internet Information Server Performance <http://www.microsoft.com/ISN/whitepapers/tuningiis.asp> IIS 4.0 Tuning Parameters for High-Volume Sites <http://msdn.microsoft.com/workshop/server/feature/tune.asp> Enhancing Performance in Internet Information Server 4.0 - Technet - Q235461 Server Performance Optimization on Microsoft’s Web Site <http://www.microsoft.com/backstage/whitepaper.htm> Server Performance and Scalability Killers <http://msdn.microsoft.com/workshop/server/iis/tencom.asp> Ferramentas de stress e análise: The Microsoft® Web Capacity Analysis Tool (WCAT) 4.32 User Guide and Download <http://msdn.microsoft.com/workshop/server/toolbox/wcat.asp> Web Application Stress Tool - <http://webtool.rte.microsoft.com/> Aspectos de segurança a serem observados: Microsoft Internet Information Server 4.0 Security Checklist <http://www.microsoft.com/security/products/iis/CheckList.asp> Para sites que utilizem Microsoft Site Server 3.0: Optimizing ASP Performance in Site Server 3.0, Commerce Edition - Technet High Availability for MS Site Server 3.0 - Technet