- Get link
- X
- Other Apps
Otimizando Aplicações ASP.NET
Dica 01: Trabalhe com mais de um AppPool
Por padrão, cada AppPool recebe um processo (IIS Work Process) que fica diretamente encarregado por atender requests HTTP ao AppPool.
Caso sua aplicação possua mais de 01 Website ou Serviço (ASPNET Service, Webservice) configurado no AppPool padrão (DefaultAppPool) talvez seja interessante que sejam em AppPools distintos, vale a pena separar e ganhar diversos recursos.
Mais sobre o IIS AppPool : http://technet.microsoft.com/en-us/library/cc735247(v=ws.10).aspx
Dica 02: Aumente o tamanho máximo da fila de requisições
Cada AppPool tem sua fila de requisições HTTP e o tamanho máximo pode ser configurado individualmente. O valor padrão para esta fila é de 1000. Para melhorar a performance coloque este número em 5000 (para o caso do servidor ter mais de 2 GB de RAM). Se quiser ajustar o valor para os AppPool's utilize a opção “Definir Padrões do Pool de Aplicativos”
Dica 01: Trabalhe com mais de um AppPool
Por padrão, cada AppPool recebe um processo (IIS Work Process) que fica diretamente encarregado por atender requests HTTP ao AppPool.
Caso sua aplicação possua mais de 01 Website ou Serviço (ASPNET Service, Webservice) configurado no AppPool padrão (DefaultAppPool) talvez seja interessante que sejam em AppPools distintos, vale a pena separar e ganhar diversos recursos.
Mais sobre o IIS AppPool : http://technet.microsoft.com/en-us/library/cc735247(v=ws.10).aspx
Dica 02: Aumente o tamanho máximo da fila de requisições
Cada AppPool tem sua fila de requisições HTTP e o tamanho máximo pode ser configurado individualmente. O valor padrão para esta fila é de 1000. Para melhorar a performance coloque este número em 5000 (para o caso do servidor ter mais de 2 GB de RAM). Se quiser ajustar o valor para os AppPool's utilize a opção “Definir Padrões do Pool de Aplicativos”
Dica 03: Aumente o número de conexões simultâneas por processador
Se sua aplicação ASP.NET usa requisições assíncronas, preste atenção nesta
dica. Alterar essa configuração é muito importante para melhorar o desempenho
do Push. Por padrão as aplicações ASP.NET (v2.0) permitem apenas 12 conexões
simultâneas por processador.
Em termos de conexões síncronas, esse número é
razoável.
Quando uma requisição HTTP chega ao IIS (versão 6.0), essa requisição
é repassada a uma I/O thread do ASP.NET.
Imediatamente, o ASP.NET coloca essa
requisição no ThreadPool do .NET para que possa ser processada e retorna para o
IIS o estado HSE_STATUS_PENDING,
isso faz com que a thread do IIS seja liberada e esta pode então tratar de
outras requisições, como elementos estáticos de uma página por exemplo. Logo,
um requisição síncrona acaba gerando uma thread. Em um cenário onde temos um
computador com dual core, pode-se chegar ao processamento de 24 requisições
simultâneas.
Este valor é suficiente para a maioria dos cenários web, porém, no
caso de requisições assíncronas o valor de requisições e de threads processando
essas requisições podem ser diferentes.
Para melhorar o desempenho neste caso,
podemos editar o registro do Windows e adicionar uma chave chamada MaxConcurrentRequestsPerCPU
em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0
com um valor DWORD
de 5000.
Não há nada de especial com este
número, é apenas um número grande que permite um monte de requisições
assíncronas.
Mais...
(a) Nas versões 7.0 e 7.5 do IIS (Integrated Mode), as requisições são
colocadas em uma fila global (que concorre por processador), no IIS 6 essa fila
é por aplicação.
(b) Na versão 4.0 do .NET, o valor padrão para a chave MaxConcurrentRequestsPerCPU
já é 5000.
(c) Na versão 3.5 do .NET este valor pode ser colocado no Web.config, utilizando
a chave applicationPool
(dentro de system.web) e caso seja colocado no Web.config,
o valor do registro é totalmente ignorado.
Comments