Como posso aquecer meu aplicativo asp.net mvc webapp após a reciclagem de um pool de aplicativos?

23

Estou executando um webapp do ASP.NET MVC no IIS 8.0. Meu aplicativo precisa ser aquecido antes de receber solicitações. Já temos um processo para aquecer o aplicativo automaticamente quando implantamos um novo código. No entanto, estamos vendo eventos periódicos de Reciclagem do pool de aplicativos que resultam no aquecimento do aplicativo.

Existe uma prática recomendada para detectar um evento de reciclagem do pool de aplicativos e executar um script ou algum código?

AgileJon
fonte

Respostas:

55

Há várias coisas que você pode fazer:

1. Inicialização do aplicativo

Você pode usar o Application Initialization Module que vem na caixa com o IIS 8.0

você pode ter algo assim no seu web.config

<applicationInitialization
     doAppInitAfterRestart="true" >
   <add initializationPage="/" />
</applicationInitialization>

Isso enviará uma solicitação para a raiz do seu aplicativo ( initializationPage="/") toda vez que ele for iniciado automaticamente.

Você também pode configurar o Modo Iniciar do seu pool de aplicativos, o Always Runningque significa que toda vez que o IIS for reiniciado, ele iniciará o pool de aplicativos imediatamente (isso se você clicar com o botão direito do mouse no pool de aplicativos e, em seguida,Advanced Settings

insira a descrição da imagem aqui

e Preloadpara o seu próprio site (clique com o botão direito do mouse no site e Manage SitedepoisAdvanced Settings

insira a descrição da imagem aqui

2. Desativar tempo limite ocioso

Além disso, você pode desativar o idleTimeout (por padrão, o IIS desligará o aplicativo após 20 minutos de atividade) alterando o de in Idle Time-outdo seu pool de aplicativos para 0 (infinito)

insira a descrição da imagem aqui

3. Desative a reciclagem periódica

também desabilite Regular Time Interval (minutes)por padrão o IIS reciclaria seu aplicativo a cada 29 horas.

insira a descrição da imagem aqui

Para

ahmelsayed
fonte
3
Comentários sobre os inconvenientes dessas configurações serão apreciados. Certamente, há uma razão pela qual eles não são padrões.
precisa saber é o seguinte
2
Claro, alto consumo de memória se você executar vários sites na mesma caixa do IIS, pois todos os sites permanecem ativos o tempo todo, o que leva a uma densidade muito baixa do site. Também não há proteção contra vazamentos de memória em seus aplicativos. Lembre-se de que o IIS existia antes que os idiomas gerenciados se tornassem populares para a Web e muitos aplicativos executavam manipuladores nativos que entravam em vazamentos de memória e em um estado estranho, se deixados em execução por um longo tempo. Isso foi feito para ajudar os administradores de sistemas que precisavam acordar no meio da noite para redefinir os servidores devido a problemas no aplicativo. Eles ainda são padrões principalmente por razões de comparabilidade para trás
ahmelsayed
1
Alternativas no IIS 7.5 - Windows Server 2008 R2 ?
Kiquenet
2
Você pode obter o Módulo de Inicialização de Aplicativos para o IIS 7.5 para o # 1 funcionar. # 2 e # 3 são aplicáveis ​​como estão no IIS 7.5
ahmelsayed
1
FYI para pessoas usando este: o applicationInitializationentra<configuration><system.webServer>
Paul
1

De acordo com minha experiência, o AlwaysRunning e o Preload ativado não aceleram muito. O maior tempo de espera passa pela compilação dinâmica (que pode ser corrigida com pré-compilação aspx) e pelo carregamento de assemblies na memória e no cache.

zmikic
fonte