IIS - Mantendo o site sempre ativo

Visão Geral

Por padrão, o IIS define parâmetros de encerramento de processos inativos e reciclagem de recursos nos Pools de Aplicativos. Isso ajuda a manter a saúde do servidor, liberando memória e derrubando sites que não estejam recebendo nova requisições a algum tempo.

Sendo assim, um site pode ser interrompido naturalmente no servidor por dois motivos comuns:

  • “Tempo Limite de Ociosidade” (idleTimeout) do Pool de Aplicativos excedido
  • Reciclagem de Pool de Aplicativos - Manualmente, agendada ou por limite de recursos.

Quando um site é interrompido, ele volta a funcionar automaticamente quando ocorrer uma nova requisição, ou seja, quando uma página for solicitada em navegador ou algum Web Service for consumido externamente.

No entanto, este cenário causa um problema: Um serviço sendo executado em segundo plano pelo site (no servidor), não é considerado uma requisição, e sendo assim, o processo pode ser interrompido a qualquer momento, sendo retomado apenas quando uma nova requisição for realizada.

Neste tópico, vamos descobrir como manter o site sempre ativo sem impedir fazer que o IIS recicle e reinicie processos.

Solução

Você vai precisar destes pré-requisitos do IIS para manter seu site sempre em execução:

  1. Recurso “Inicialização de Aplicativo” (Application Initialization)

  2. “Modo de início” (Start mode) do Pool de Aplicativos: AlwaysRunning

  3. “Pre-carregamento” (Preload) habilitado no Aplicativo

Inicialização de Aplicativo

Para instalar este recurso, acesse o Gerenciamento do Servidor e marque a opção selecionada na imagem.

Esse recurso precisa ser instalado para que o parâmetro “Pre-carregamento” (Preload) que será abordado mais à frente tenha algum efeito, caso contrário a opção será listada no IIS mas não causará nenhum efeito.

Modo de início

Agora vamos configurar o parâmetro “Modo de Início” do Pool de Aplicativos.

Esse parâmetro define como o processo do Pool de Aplicativos será iniciado. Se a opção OnDemand estiver selecionada, o processo só será iniciado quando houver uma solicitação. Se a opção AlwaysRunning estiver selecionada, um novo processo será criado logo após o anterior ser eliminado.

O valor deste parâmetro precisa ser AlwaysRunning para que a opção de Pre-carregamento (Preload) que veremos a seguir funcione.

image

Pre-carregamento

Após nos certificarmos de que o processo do Pool de Aplicativos estará sempre ativo, é hora de realizarmos as configurações que farão com que a Aplicação (vinculada ao Pool) fique sempre ativa.

Para isso, devemos habilitar o parâmetro “Pre-carregamento” nas Configurações Avançadas da Aplicação, dentro do Web Site:

image

image

Habilitando essa opção, toda vez que o processo do Pool de Aplicativos for iniciado, o IIS vai disparar uma requisição para o site (como se um usuário estivesse acessando pelo navegador), apenas para que ele seja inicializado.

Isso vai permitir que os processos em segundo plano continuem sendo executados mesmo sem nenhum usuário conectado e além disso, quando o primeiro usuário conectar, o site já vai estar “aquecido”, não sendo necessário aguardar o tempo de carregamento da aplicação.

2 curtidas

Excelente!
Percebi que o envio automático das mensagens só eram executados quando o site estava ativo.

1 curtida

Isso mesmo @Douglas_Nascimento!

É preciso fazer essa configuração para que os agendamentos de mensagens sejam executados nos horários de inatividade.

O mesmo vale para qualquer serviço executado em segundo plano pelo site.