Por que o processo do operador do IIS recicla a cada 29 horas e não a cada 24 horas?


24

Quando você configura um site no IIS, o processo de trabalho é padronizado para reciclagem a cada 1740 minutos (29 horas). Por que um número ímpar como 29 horas e não, por exemplo, 24 ou 48 horas?

Respostas:


27

No Tech Ed 2003, o apresentador recebeu essa pergunta e a resposta era que eles queriam um ciclo irregular para impedir que ocorresse em um limite diário (por exemplo, para diferenciar de outras tarefas diárias agendadas no servidor / domínio).

O site aqui (link morto) especulou:

... (29 é o) primeiro prime após 24, permitindo que ele tenha a menor chance de ocorrer em um padrão regular com qualquer outro processo do servidor; facilitando a investigação de problemas

Outro site parece confirmar isso:

( Wade Hilmo ) sugeriu 29 horas pela simples razão de que é o menor número primo entre 24. Ele queria um padrão escalonado e não repetitivo que não ocorra com mais frequência do que uma vez por dia


Interessante. Pessoalmente, acho que ter algo recorrente no mesmo horário todos os dias facilitaria o rastreamento se a reciclagem do processo do trabalhador estivesse causando outros problemas. por exemplo, rastrear um problema que ocorre aproximadamente todos os dias é difícil, mas é mais fácil se acontecer às 19:00 todos os dias, porque você pode pesquisar no sistema por eventos que acontecem naquele momento. Eu sei que você pode definir o IIS para reciclar sempre que quiser ou não, mas na maioria das vezes o deixa no seu padrão. Obrigado pela resposta!
— Guy

18

OK, isso estava me incomodando, então eu procurei e finalmente encontrei essa postagem de um cara que aparentemente estava na equipe do IIS:

O motivo pelo qual o IIS6 recicla a cada 29 horas por padrão (e tivemos um motivo

O motivo pelo qual o IIS6 recicla a cada 29 horas por padrão (e tivemos um motivo para escolher 29 horas como o valor padrão) é porque, mais provavelmente, o aplicativo Web em execução nele não é confiável e literalmente precisa reiniciar com freqüência.

Portanto, o IIS6 é construído com base na premissa (reconhecidamente cínica) de que o aplicativo Web do usuário não será executado por mais de 24 horas contíguas, os recursos serão planejados de acordo e os padrões escolhidos. Os processos do trabalhador são reciclados a cada 29 horas, a inicialização e o desligamento do processo são monitorados, o processo é constantemente ativado para garantir que esteja em execução, o identificador do processo é rastreado e sinalizado quando termina inesperadamente, etc.

Percebendo que a reciclagem é uma parte normal das operações, o IIS6 também se certifica de isolar essa reciclagem do usuário final - a conexão TCP do usuário final nunca termina durante uma reciclagem, devido a alguma mágica no modo kernel. Combinado com o aplicativo no modo usuário que armazena o estado da sessão fora de processo (como o ASP.Net Session State Service), é garantido um tempo de atividade confiável garantido praticamente sem perda de dados visível pelo usuário, mesmo se o aplicativo da web travar após o processamento de todos os Solicitação de usuário.

Isso é tão bom quanto o IIS6 pode torná-lo - dado um aplicativo da web não confiável, faça com que pareça confiável para o usuário final e faça isso sem exigir nenhuma correção do aplicativo da web não confiável.

Obviamente, nem todos os aplicativos não confiáveis ​​podem parecer confiáveis ​​- nesse caso, estamos todos sem empregos! - mas o IIS6 com certeza tenta muito mais ser resiliente.

No seu caso, acontece que a resiliência tem um efeito colateral no estado do usuário não persistente, mas pode ser facilmente ajustada.

Supondo que seu aplicativo Web nunca tenha um problema e permaneça com o estado da sessão em processo, você desejará alterar os seguintes padrões: 1. Desative a reciclagem periódica de 29 horas 2. Desative o tempo limite de inatividade de 20 minutos

Isso impedirá a perda inesperada do estado da sessão.

Obviamente, se você usar um aplicativo com estado de sessão fora de processo, poderá deixar tudo como padrão e nunca perceber uma diferença na funcionalidade nem na confiabilidade.


1
Sinto-me idiota ao perguntar isso, mas se o IIS pressupõe que o aplicativo Web não chegue a 24 horas, por que 29 foi uma boa escolha? Eles não deveriam ter escolhido um número abaixo de 24? Onde estou errado na interpretação dessa explicação?
— Alpha

Talvez não haja uma "melhor" resposta para o valor padrão, e a pessoa que administra o site deve tomar uma decisão deliberada com base no aplicativo e no sistema.
— DOK

@Alpha - Eu concordo - que não faz sentido - ele deve usar como padrão para 22 ou 23 horas ou pelo menos algo menor do que 24.
— Guy

[citation needed]
— piers7 11/03/13

Estou recebendo um estranho erro de compilação em partes do site todas as manhãs que só podem ser corrigidas com uma reciclagem. Meu palpite é que o Idle Timeout é acionado da noite para o dia devido à baixa carga e, por algum motivo, quando é iniciado novamente, o erro de compilação está de volta. Agradecimentos para a liderança, eu vou seguir este caminho para corrigir o meu problema ...
— sonjz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.