Migrei recentemente um conjunto de servidores Windows Server 2008 R2 / IIS 7.5 para novos servidores executando o Windows Server 2012 / IIS 8.
Estou tendo algum comportamento estranho no IIS. Temos dois servidores idênticos, cada servidor está executando dois sites, cada um em seu próprio pool de aplicativos. O código para cada um dos sites é idêntico. (Literalmente ... mesmas dll e tudo, apenas configuração ligeiramente diferente).
Os pools de aplicativos estão configurados para reciclar em uma programação a cada 24 horas, mas, durante esse período de 24 horas, o uso da CPU do processo do operador w3wp aumenta em incrementos de 12,5% (o servidor possui 8 processadores, por isso acho que não). uma coincidência).
Depois que o uso da CPU aumenta, ele NÃO diminui até que o aplicativo seja reciclado. Até onde eu sei, o aplicativo não está fazendo nada e está processando pedidos de NO momento. Posso bloquear todo o tráfego do servidor e o uso da CPU permanecerá lá. Posso até reiniciar o site e o uso da CPU permanece o mesmo. A única maneira de redefinir o uso da CPU é reciclar ou reiniciar o pool de aplicativos em que ele é executado.
Estou um pouco certo de que esse problema não tem nada a ver com o meu código, mas algum tipo de configuração ruim do IIS ou uma alteração no IIS 8 que está funcionando mal com a configuração de hardware ou algo assim?
Não tenho certeza se é importante ou não, mas esses são servidores Rackspace Performance Cloud.
Aqui está uma captura de tela para mostrar a carga da CPU ao longo do tempo nesses servidores (as setas verdes apontam para os momentos em que o pool de aplicativos é reciclado. Você pode ver que cada platô é um múltiplo integral de 12,5%:
Alguém já observou esse comportamento? Eu encontrei esta pergunta em 2009 com alguém com o que parece ser o mesmo problema no IIS 6:
IIS w3wp usando CPU alta sem tráfego
Qualquer ajuda é muito apreciada
Você pode tentar usar a ferramenta Debug Diagnostic para rastrear o que está causando o problema. Geralmente é para solucionar problemas de falhas e vazamentos de memória, mas pode ajudar a encontrar qual componente está causando o problema.
fonte
high CPU or RAM more 90%
?Isso realmente parece com algum código preso em um loop infinito.
Uma solicitação é recebida, o IIS começa a atendê-la, algo (provavelmente um bug) desencadeia esse comportamento, um thread de trabalho entra em um loop infinito e vincula uma CPU a 100% e depois permanece assim até que o pool de aplicativos seja reciclado.
Mesmo que nenhuma solicitação nova seja recebida, a CPU permanece em uso porque o encadeamento travado nunca termina realmente.
Às vezes, uma nova solicitação aciona esse comportamento novamente e, em seguida, você recebe duas CPUs travadas (ou três ou quatro ...).
É claro que a reciclagem do pool de aplicativos encerra todos os threads de trabalho, assim o problema é resolvido ... até que ocorra novamente.
fonte
Você pode anexar um perfilador de CPU ao processo w3wp e ver o que está acontecendo lá. Você deve poder ver o que consome os ciclos da CPU.
fonte
Parece um loop infinito para mim. Eu já vi isso algumas vezes, apesar do IIS dizer que não há solicitações pendentes. Não tenho certeza de como isso pode ser, mas é exatamente isso que você veria. A parte difícil é que o IIS não registra solicitações até que elas sejam concluídas, portanto, é difícil descobrir qual solicitação aciona esse comportamento.
fonte