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


8

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

Sei que, com o x86, o servidor não utilizará toda a RAM de 4 GB e o espaço do aplicativo também é limitado, mas os processos do IIS parecem limitados em outros lugares. O w3wp.exe nunca possui mais de 500 MB 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 IIS6 pode usar?

Respostas:


7

Os aplicativos no Windows x86 estão limitados 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. A MS oficialmente não oferece suporte a isso ( http://technet.microsoft.com/en-us/library/bb124810.aspx )

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 ultrapassa os 500 MB? Se você estiver usando o Gerenciador de tarefas, lembre-se de que raramente (se é que existe) uma representação precisa do uso de memória, conforme o Windows o entende. Use o Process Explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Há várias outras questões relevantes:

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

Provavelmente, o IIS, o ASP.NET e toda a bagagem associada estão com o limite de 2 GB, mesmo que o Windows Task Manager não o mostre. Definir limites de reciclagem ou atualizar para x64 provavelmente fará uma enorme diferença.


3

ocasionalmente obtém exceções OutOfMemory de um aplicativo .NET ocupado

A resposta para isso é muito complexa para caber em uma resposta. Consulte " Ajustando o desempenho do aplicativo .NET " para obter um tratamento completo do assunto.

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

Além disso, o tempo de execução do .NET não permite que você vá até 2 GB. O coletor de lixo trabalha copiando objetos ativos, portanto, precisa de uma quantidade razoável de espaço para executar suas cópias.

Editar:

Aqui está minha tentativa de 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 em x86, a resposta é "depende" .

Em qualquer tipo de código gerenciado, como Java ou .NET, o programador renuncia ao controle refinado da memória como penitência por não ter que lidar com indicadores. À medida que um programa é executado, o Heap and Stack será limpo periodicamente pelo Garbage Collector .

Especificamente em relação ao ASP.NET, o coletor de lixo é executado dentro do mesmo processo de trabalho que o site. O GC consome memória própria. Como muito 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 engasgar com 500 MB. Para entender por que , você precisa criar um perfil para seu aplicativo específico.


Concordo que a depuração de exceções OutOfMemory é complexa - obrigado pelo link. No entanto, estou perguntando como a memória é limitada e deve ser possível responder a isso.
Robin M

2

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


Sim, mas não estou nem perto de 2 GB para um processo?
586 Robin M

2

Nesta postagem do blog "Recomendações para as configurações do pool de aplicativos do SharePoint" :

Concentrando-me no físico Eu normalmente gosto de limitar os pools de aplicativos em torno de 800 MB a 1200 MB no máximo em um aplicativo de 32 bits com muito poucos pools de aplicativos, dependendo do número e da quantidade de memória. Em um servidor com 2 GB de RAM, eu o definiria em torno de 800 MB no máximo. Em um servidor de 4 GB de RAM, com cerca de 1 GB e mais, se mais, com um máximo em torno de 1200. Em um front end da Web de 64 bits com memória de 8 a 16 GB, ouvi falar de configurações de 2 GB de RAM ou até mesmo de permitir que ele funcionasse, ao invés de limitá-lo.

Você realmente precisa criar um perfil, pois eles podem crescer para processar e armazenar em cache. Quanto maior a quantidade de memória e maior a carga, maior será o processo do trabalhador. Quando as pessoas perguntam sobre como configurar o pool de aplicativos, é onde costumam perguntar quais devem ser os números. O que você está fazendo aqui é limitar explicitamente o pool de aplicativos a consumir mais memória. Observe que essa configuração está na guia Reciclar, há uma razão para isso.

Quando um pool de aplicativos atinge o máximo, não é como a configuração máxima do processador. Ele alternará o processo de trabalho, que é como uma pequena reinicialização ou semelhante a um iisreset, mas não porque às vezes queremos que isso aconteça, para que possamos liberar nossa memória. Você realmente não deseja pedalar mais de duas vezes por período de 24 horas em um mundo ideal. Ouvi falar de algumas tentativas de pedalar antes que o pico da manhã ocorra, para que elas tenham a maior quantidade de memória disponível, depois um ciclo no final do dia antes do início dos backups ou do rastreamento.

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


2

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

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

<system.web> 
  <processModel memoryLimit="80" />
</system.web> 

1

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


Ok, mas isso não explica por que o processo é limitado a 500 MB. A memória padrão para um pool de aplicativos é interessante, mas não é realmente relevante ou útil, desculpe!
586 Robin M

Você está executando o SQL na mesma caixa por acaso?

Não. SQL não está na mesma caixa. É limitado a web / ftp / smtp usando o IIS.
5269 Robin M
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.