Qual é a memória máxima que um site / pool de aplicativos do IIS6 pode usar?

8

Eu tenho um servidor IIS 6 em execução no Windows 2003 SP2 x86. O servidor tem 4 GB de RAM e é executado consistentemente com 2 GB alocados.

Eu percebo que com o x86, o servidor não utilizará todos os 4GB de RAM e o espaço do aplicativo também é limitado, mas os processos do IIS parecem estar limitados em outros lugares. w3wp.exe nunca tem mais de 500MB alocados e ocasionalmente recebo exceções OutOfMemory de um aplicativo .NET ocupado (há vários aplicativos em execução, cada um com um pool de aplicativos separado).

Qual é a memória máxima que um site / pool de aplicativos do IIS6 pode usar?

    
por Robin M 05.05.2009 / 16:22

6 respostas

7

As aplicações no Windows x86 estão limitadas a 2 gb / ea. Você pode alterar isso adicionando o sinalizador / 3gb ao boot.ini, mas isso pode causar um comportamento inesperado do aplicativo e deve ser usado com cuidado. MS oficialmente não suporta isso ( link )

Os limites de memória do IIS podem ser definidos na guia Reciclagem no pool de aplicativos relevante.

Como você está determinando que o aplicativo nunca ultrapasse 500MB? Se você estiver usando o Gerenciador de Tarefas, lembre-se de que é raramente (ou nunca) uma representação precisa do uso de memória conforme o Windows o entende. Use o Process Explorer: link

Existem várias outras questões relevantes:

  • Existem erros registrados em seus registros de eventos?
  • É uma linha de código específica lançando as exceções? Em caso afirmativo, esta exceção OutOfMemory, na verdade, é um problema do IIS ou um problema de código?
  • Você está limitando seus pools de aplicativos com a configuração Recyling?
  • Existem outros serviços em execução nesta máquina?

Provavelmente, o IIS, o ASP.NET e todas as bagagens associadas estão sendo executados no limite de 2 GB, embora o Gerenciador de Tarefas do Windows não o mostre. Definir os limites de reciclagem ou atualizar para x64 provavelmente fará uma grande diferença.

    
por 05.05.2009 / 16:48
3

occasionally get OutOfMemory exceptions from a busy .NET application

A resposta para isso é muito complexa para caber em uma resposta. Consulte " Ajuste do desempenho de aplicativos .NET " para um tratamento completo de o assunto.

Aqui está um resumo muito simplista (mas ainda muito bom) de Bruno Jouhier :

Furthermore, the .NET runtime does not let you go up to 2 GB. The garbage collector works by copying live objects, so it needs a fair amount of space to perform its copies.

Editar:

Aqui está minha tentativa de uma explicação ...

Se você está se perguntando qual é o tamanho máximo da memória do processo de trabalho (conforme relatado pelo Gerenciador de Tarefas) para um Processo de Trabalho do ASP.NET no x86, a resposta é "depende" .

Em qualquer tipo de código gerenciado, como Java ou .NET, o programador desiste de um controle refinado da memória como uma penitência por não ter que lidar com ponteiros. Conforme um programa é executado, o heap e a pilha serão limpos periodicamente pelo coletor de lixo .

Especificamente em relação ao ASP.NET, o coletor de lixo é executado dentro do mesmo processo de trabalho do site. O GC consome memória própria. Como muita memória é inteiramente uma função de como o código do seu aplicativo é escrito. Um aplicativo pode usar 1,8 GB de memória, enquanto outro pode sufocar a 500 MB. Para entender por que , você precisa criar um perfil para seu aplicativo específico.

    
por 05.05.2009 / 16:58
2

Qualquer processo em um sistema operacional x86 do Windows é limitado a 2 gb, a menos que você tenha configurado a opção / 3gb no arquivo boot.ini, caso em que um processo pode usar 3 gb.

    
por 05.05.2009 / 16:33
2

A partir desta postagem do blog "Recomendações para configurações do pool de aplicativos do SharePoint ":

Focusing on physical I typically like to limit app pools around 800MB to 1200 MB max on a 32 bit app with very few app pools depending on the number and amount of memory. On a server with 2 GB RAM I'd set it at around 800MB max. On a 4GB of RAM server around 1GB and more if more with a max around 1200. On a 64 bit web front end with 8-16 GB memory I've heard of settings of 2GB of RAM or even allowing it to let it ride, rather than limiting it.

You really need to profile it since these can really grow to process and cache. The greater the amount of memory and the greater the load the higher the worker process will grow. When people ask about configuring the app pool, this is where they are usually asking what the numbers should be. What you are doing here is explicitly limiting the app pool from consuming more memory. Notice this setting is on the recycle tab, there's a reason for that.

When an app pool reaches the max it isn't like the max processor setting. It will cycle the worker process which is like a tiny reboot or similar to an iisreset, but not since sometimes we want this to happen so we can release our memory. You really don't want to cycle more than a couple of times per 24 hour period in an ideal world. I've heard of some trying to cycle right before the morning peak occurs so they have the most amount of memory available, then a cycle right at the end of the day before the backups or crawling begins.

Da minha experiência 800 MB é o limite para máquinas de 32 bits (2-4 GB de RAM). Recicla pools de aplicativos antes de lançar exceções "sem memória".

    
por 07.05.2009 / 17:57
2

Verifique se você não está definindo o tamanho da memória virtual no pool de aplicativos. Se você definir esse valor para um número fora do intervalo permitido, ele será revertido para 512 MB. Consulte KB923197 .

Observe também que, se você estiver executando um aplicativo ASP.Net, o ASP.Net reciclará o pool em 60% do limite de 2 GB de memória, ou 1,2 GB. Este não é o seu cenário ~ 500, mas em aplicativos de 32 bits com grande uso de memória, às vezes, usamos isso para obter um pouco mais de memória.

<system.web> 
  <processModel memoryLimit="80" />
</system.web> 
    
por 21.05.2009 / 06:14
1

No Windows 2003, você pode definir Extensão de alocação física (PAE) para fazer uso de toda a memória . A memória padrão para um pool de aplicativos do IIS6 é 5MB .

    
por 05.05.2009 / 16:36