Recentemente, criamos um novo servidor de produção para servir um aplicativo de negócios do ASP.NET 4.0. As especificações para o novo servidor são o Windows Server 2008 R2, o Xenon de 2 núcleos, o IIS 7.5, a RAM de 2 GB (que em breve será de 4 GB). Antes do novo servidor, estávamos rodando / testando o aplicativo em um único núcleo do Windows Server 2003, IIS 6, 4Gb de RAM.
Nosso aplicativo usa um serviço da web ASMX para validar logins no Active Directory usando LDAP.
Percebemos imediatamente que houve um aumento significativo nos tempos de resposta ao acessar o serviço da Web a partir do novo servidor, mas apenas no "primeiro acesso". Curiosamente, 99,9% das vezes o tempo de resposta para este 'first-hit' é de 15 segundos (literalmente entre 15000 e 15999ms). Ocorrências subsequentes resultam em tempos de resposta típicos (< 100ms - 300ms) para todos os usuários. No entanto, esperar mais do que 2 a 3 minutos fará com que esse comportamento de "primeiro ataque" aconteça novamente.
Os tempos de resposta para o mesmo serviço, no servidor antigo, nunca são superiores a 300 ms ... Mesmo depois de reiniciar o IIS6.
O Trace Route para os servidores antigo e novo é exatamente o mesmo. O mesmo com os tempos de resposta do Ping.
Após muitos testes, a única maneira confiável de se reproduzir (e, assim, definir o 'primeiro hit') é:
a) wait 2-3 minutes, or
b) recycle the app pool, or
c) restart IIS
O aplicativo está sendo executado em seu próprio pool de aplicativos, usando o .NET 4.0 Framework.
Este é o estado atual do aplicativo e do IIS:
- All Recycling turned off for all pools (Idle Timeout & Fixed Intervals)
- No debugging references in Web.config
- App is pre-compiled (published via Visual Studio)
- Managed Pipeline = Integrated
- Identity = NetworkService
- Running in 64-bit mode (changing to 32-bit mode had no effect)
Primeiramente, achei que isso era um problema de reciclagem, pois vi muitos posts relacionados a isso. No entanto, isso não explica por que o comportamento de 'primeiro ataque' ocorre depois de esperar por apenas 2 a 3 minutos.
A única coisa que eu não tentei é o aquecimento do IIS. Isso ocorre porque a) eu não tenho direito de instalá-lo eb) na minha opinião, o 'primeiro hit' é para a página de login real, não o serviço (a menos que eu esteja enganado). A página de login é carregada em menos de 300 ms, independentemente de ser "first-hit" ou não.
Uma outra nota ... Na verdade, temos dois novos servidores prod, que são idênticos. Um de nossos outros aplicativos usa balanceamento de carga nos dois servidores. O aplicativo em questão aqui está localizado apenas em um dos servidores e não está sendo balanceado em carga. Isso poderia ter algo a ver com isso ...?
Espero que você possa ajudar!