Aplicativo IIS7 ASP.NET - 2 aplicativos idênticos em 2 pools de aplicativos idênticos, 1 responde e 1 não


12

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 ...


E as pastas de aplicativos são idênticas em bytes?
usr

Sim, apenas verifique três vezes, mas a única diferença está no web.config, onde especifica o nome do diretório virtual no qual está sendo hospedado (e verifiquei novamente essa também a única diferença). Todos os outros arquivos são idênticos em bytes. .

O que o aplicativo está fazendo e está demorando mais em um apppool? Você pode anexar o VS e pausar o depurador para criar um perfil?
usr

Não tenho o VS instalado no servidor, pois é um sistema de produção, mas parece que é a minha próxima parada. Eu estou no meio da adição de logs detalhados aos componentes de acesso a dados e acesso a arquivos, pois o rastreamento que mostramos ainda não foi específico. Vou pegar mais algumas estatísticas e adicioná-lo o mais rápido possível - eu estava otimista de que alguém pode ter encontrado semelhante para que eu pudesse evitar esse caminho

1
Como você está carregando o perfil do usuário, essa parece ser a principal diferença entre esses pools de aplicativos. Verifique os locais temporários desses usuários, as permissões de gravação de arquivos e, se estiver se conectando a um banco de dados usando o mesmo usuário, verifique também as permissões no banco de dados. Basta que uma consulta atinja o tempo limite desse usuário, portanto teste com o mesmo banco de dados, se possível. Boa sorte!

Respostas:


1

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.


0

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.


0

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.


0

Esta não é a solução, mas trabalharemos para isso;

  1. Execute IISRESET (durante o horário de manutenção) ou elimine o W3WP que pertence ao pool de aplicativos que não responde

  2. Inicie o aplicativo

  3. 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

  4. Pegue o mscordacwks.dll e o mscorwks.dll em C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.XXXXX

  5. Compacte e faça o upload desses arquivos em algum lugar de onde eu possa fazer o download.

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.