Wednesday, May 29, 2013

Otimizando Aplicações

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 AppPoolhttp://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.

No comments: