Eu tenho um aplicativo Web ASP.NET (v4.0) instalado em um diretório virtual (como um aplicativo) e hospedado em seu próprio pool de aplicativos. Isso é repetido para cada instância do aplicativo (por cliente).
Os pools de aplicativos estão no modo integrado (não clássico) e o LoadUserProfile está definido como true. Caso contrário, as configurações padrão.
Atualmente, cada instância possui sua própria cópia do código / configuração e sua própria pasta de dados (leitura / gravação básica de arquivo).
Uma instância deste aplicativo funciona bem (a operação usada para comparação leva ~ 4 segundos). Todas as outras instâncias são executadas lentamente (de 10 a 25 segundos para a mesma operação).
Se eu mover a instância mais lenta para o pool de aplicativos "mais rápido", essa instância ganha vida. Se eu mover a instância mais rápida para o pool de aplicativos mais lento, essa instância diminui para um rastreamento.
Os pools de aplicativos foram criados da mesma maneira inicialmente - manualmente. Mais tarde, usei a rotina de cópia do PowerShell para garantir uma cópia exata do pool de aplicativos mais rápido e ainda o mesmo comportamento. A comparação dos arquivos apppool.config mostra que eles são idênticos, exceto as atribuições de diretório virtual.
Não há recursos compartilhados bloqueados, pelo que sei, e testei o desligamento do pool de aplicativos com bom desempenho e a reinicialização ... lento ainda é lento e, quando reinicio esse pool de aplicativos (está carregado) por último) ainda é mais rápido ...
Respostas:
Para isolar ainda mais o problema, sugiro executar o Wireshark (ou outro analisador de pacotes preferido) no sistema host, por duas sessões. Supõe-se que cada pool de aplicativos tenha um IP exclusivo atribuído a ele ou uma porta exclusiva.
Primeiro, obtenha o desempenho da linha de base filtrando a porta IP: do seu pool de aplicativos rápido. Veja como é o tráfego de e para o aplicativo em condições "normais".
Na segunda execução, você precisará capturar o tráfego do pool de aplicativos lento / que não responde. Se todo o roteamento de rede estiver correto, você deverá ver solicitações repetidas em uma direção, provavelmente para o aplicativo de outro lugar. pesado na saída em vez da entrada.
Este teste informará se o problema está no aplicativo ou se são problemas relacionados ao TCP / IP que resultam em solicitações para o tempo limite do aplicativo devido a pouca ou nenhuma comunicação.
Correlacione os registros de data e hora de seus testes com os logs de eventos do servidor e (se aplicável) os logs de rastreamento de rastreamento, e você deve conseguir se concentrar no problema.
fonte
O Rastreamento de solicitação com falha (FRT) será sua melhor ferramenta para rastrear isso. Ele mostrará o pipeline e quanto tempo cada etapa levou para ser concluída. Isso deve indicar se é algo dentro da parte asp.net ou se é algo dentro do próprio pipeline do IIS.
Para configurar o FRT, no IIS no nível do site, crie uma regra de FRT com um intervalo de status http de 200 a 1999 e ative o FRT (é uma etapa separada do painel de ações).
Em seguida, reproduza o problema e observe os arquivos gerados (% SystemDrive% \ inetpub \ logs \ FailedReqLogFiles \ w3svc {siteid}). Abra-os no Internet Explorer.
fonte
Quando o IIS atrasa por longos períodos sem motivo aparente, geralmente significa que está aguardando o tempo limite de um serviço externo. Quando isso acontece, ele tenta outra abordagem. Na verdade, isso é verdade em praticamente qualquer coisa no Windows ou Linux. O primeiro suspeito para mim nessas situações é sempre a configuração da resolução de nomes de rede. É culpado até que se prove inocente.
Isso pode ser recriado com um usuário acessando um dos sites duplicados? Seria bom saber o que a CPU e os discos estão fazendo quando você recria o tempo de resposta de 10 a 20 segundos. Se parecer que não há muita coisa acontecendo entre 10 e 20 segundos, verifique os nomes de ligação e a resolução de nomes para os nomes de ligação. Se a CPU ou os discos estiverem diminuindo, será necessário descobrir qual processo está trabalhando muito e por quê.
Por favor, poste suas descobertas, estou curioso.
PS: Eu também verificaria a resolução de nomes e acesso a quaisquer serviços de autenticação que possam estar em jogo. Por exemplo, se o domínio do domínio precisar ser consultado, verifique se o primeiro servidor DNS da sua lista é o servidor DNS do domínio.
fonte
Esta não é a solução, mas trabalharemos para isso;
Execute IISRESET (durante o horário de manutenção) ou elimine o W3WP que pertence ao pool de aplicativos que não responde
Inicie o aplicativo
Enquanto não responder, pegue um arquivo de despejo do W3WP que pertence ao pool de aplicativos lento. Use o gerenciador de processos ou o gerenciador de tarefas para criar um arquivo de despejo
Pegue o mscordacwks.dll e o mscorwks.dll em C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.XXXXX
Compacte e faça o upload desses arquivos em algum lugar de onde eu possa fazer o download.
fonte