iis7 grande processo de trabalho fila de pedidos criando processo bloqueando aspnet.config & machine.config corrigido (afunilamento)

3

aplicativo ASP.net 2.0 estrutura do .net 2.0 IIS7

Estou vendo uma grande fila de "solicitações" aparecer sob a opção "processo de trabalho". Estado registrado parece ser Authenticate Request e Execute Request Handles mais do que qualquer outra coisa.

Eu alterei o aspnet.config em C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 (caminho de 32 bits e caminho de 64 bits) para incluir:

  maxConcurrentRequestsPerCPU="50000" 
  maxConcurrentThreadsPerCPU="0" 
  requestQueueLimit="50000"

Eu alterei o machine.config em C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ CONFIG (caminho de 32 e 64 bits) para incluir:

autoConfig="true"
maxIoThreads="100"              
maxWorkerThreads="100"
minIoThreads="50"
minWorkerThreads="50"

    minFreeThreads="176" 
    minLocalRequestFreeThreads="152" 

Ainda assim, recebo o problema.

O problema se manifesta como um grande número de processos na fila do processo de trabalho.

O número de conexões atuais para o site exibe 500 quando esse problema ocorre. Eu não acho que eu tenha visto conexões simultâneas acima de 500 sem que esse problema ocorra.

O aplicativo da Web fica lento como o bloco de solicitações.

A atualização do pool de aplicativos é resolvida por um tempo (conforme o esperado), pois a carga é distribuída entre os dois pools.

O pool de aplicativos em questão FIXED REQUEST foi configurado para atualizar em 50000.

Obrigado por qualquer ajuda. Scott

edição rápida para dizer hmm, meus desenvolvedores estão me dizendo que o projeto foi construído com o framework 3.5 .net. Olhando para

C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5

não parece ser um ASPNET.CONFIG ou um MACHINE.CONFIG .... existe um equivalente 3,5?

depois de uma pequena pesquisa aparentemente 3.5 usa os arquivos de estrutura 2.0 que 3.5 está faltando.

Então, voltando à pergunta original, onde está o meu gargalo?

    
por scott_lotus 15.04.2011 / 10:57

2 respostas

5

Otimização do IIS e ajuste de desempenho é bastante amplo tópico, e seu gargalo pode ser vários lugares.

Primeiro, você pode determinar melhor quais são os gargalos usando o Monitor de Desempenho .

Com base no que você encontra lá, é possível tentar as seguintes opções de ajuste de desempenho do IIS:

  1. Use o IIS Compressão.
  2. Ative pelo menos static caching, e ativar o armazenamento em cache dinâmico se isso fizer sentido.
  3. Ajustar seu Aspnet.config arquivos e arquivos machine.config e conexão web.config cordas para sua (s) inscrição (ões).

Verificando suas strings de conexão no web.config

Por padrão, o tamanho máximo do conjunto de strings de conexão em um arquivo web.config é 100, então tente especificar algo mais alto, como "Max Pool Size=200; Min Pool Size=10; Connect Timeout=45;" .

Exemplo:

<add name="SiteSqlServer" connectionString="Server=mydomain.com;Initial Catalog=myDB;User ID=DB;Password=myDB;Max Pool Size=100;Min Pool Size=10;Connect Timeout=45;" providerName="System.Data.SqlClient" />

Verificando suas configurações no Aspnet.config

Localização: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 e C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727

Exemplo:

<system.web>
    <applicationPool maxConcurrentRequestsPerCPU="5000" <!-- Default is 12 -->
             maxConcurrentThreadsPerCPU="0" <!-- Default is 0 -->
             requestQueueLimit="5000" <!-- Default is 5000 -->/>
</system.web>

Verificando suas configurações no machine.config

Localização: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG e C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ CONFIG

processModel

Exemplo:

<processModel 
   enable="true"
   requestQueueLimit="5000" <!-- Adjust if necessary. Default 5000 -->
   restartQueueLimit="10"  <!-- Adjust if necessary. Default 10 -->
   memoryLimit="60" <!-- Adjust if necessary. Lower for memory leaks. -->
   maxWorkerThreads="100" <!-- Default 20 -->
   maxIoThreads="100" <!-- Default 20 -->
   minWorkerThreads="40" <!-- Default 1 -->
   minIoThreads="30" <!-- Default 1 -->
/>

connectionManagement

Exemplo:

<system.net>
  <connectionManagement>
    <add address="*" maxconnection="100" <!-- Default is 2 --> />
  </connectionManagement>
</system.net>
    
por 17.07.2012 / 00:51
0

Você pode fazer pequenas mudanças no servidor, mas neste caso parece que o problema real é o código. Algo está impedindo que o código seja concluído em uma linha de tempo, fazendo com que as solicitações sejam criadas.

Use sua fila de processo de trabalho para informar qual página está construindo por mais tempo. Pode ser uma única página, ou um padrão de páginas, ou se não for, então normalmente há uma página no topo que está segurando todo o resto.

O Debug Diag é uma ótima ferramenta para solução de problemas mais avançada para isolar a página de bloqueio.

Você está certo sobre as versões do framework. .NET 3.0 e 3.5 são extensões para o 2.0. Não é até 4.0 que existe uma nova versão do framework com aspnet_isapi.dll e outros arquivos principais.

    
por 19.04.2011 / 15:22