it-swarm-pt.tech

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

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

Eu percebo que com o x86, o servidor não utilizará todos os 4 GB RAM e o espaço do aplicativo também é limitado, mas os processos IIS) parecem ser limitados em outro lugar .w3wp.exe nunca tem mais de 500 MB alocados e ocasionalmente obtenho 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 pool de sites/aplicativos IIS6 pode usar?

8
Robin M

Os aplicativos no Windows x86 sã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. O MS oficialmente não oferece suporte para 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 ultrapassará 500 MB? Se você estiver usando o Gerenciador de Tarefas, lembre-se de que raramente (ou nunca) é uma representação precisa do uso da memória como o Windows o entende. Use o Process Explorer: http://technet.Microsoft.com/en-us/sysinternals/bb896653.aspx

Existem várias outras questões relevantes:

  • Existem erros registrados em seus registros de eventos?
  • É uma linha específica de código que lança as exceções? Em caso afirmativo, esta exceção OutOfMemory é realmente um IIS problema 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, IIS, ASP.NET e toda a sua bagagem associada estão atingindo o limite de 2 GB, embora o Gerenciador de Tarefas do Windows não o mostre. Definir limites de reciclagem ou atualizar para x64 provavelmente fará uma grande diferença.

7
sh-beta

ocasionalmente obter 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 um tratamento completo do assunto.

Aqui está um resumo extremamente simplificado (mas ainda muito 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 funciona copiando objetos ativos, portanto, precisa de uma boa quantidade de espaço para realizar 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 ASP.NET em x86, a resposta é "depende" .

Em qualquer tipo de código gerenciado como Java ou .NET, o programador abre mão do 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á limpa 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 por conta própria. Como muito a memória é inteiramente uma função de como o código do seu aplicativo é escrito. Um aplicativo pode ser capaz de usar 1,8 GB de memória, enquanto outro pode engasgar com 500 MB. Para entender por quê, você precisa traçar o perfil de seu aplicativo específico.

3
Portman

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

2
Steve Evans

Certifique-se de não definir o tamanho da memória virtual em seu pool de aplicativos. Se você definir este valor para um número fora do intervalo permitido, ele reverterá 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 memória de 2 GB, ou 1,2 GB. Este não é o seu cenário ~ 500, mas em apppools de 32 bits com grande uso de memória, às vezes ajustamos isso para obter um pouco mais de memória.

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

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

Com foco no físico, normalmente gosto de limitar 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 RAM Eu definiria em cerca de 800 MB no máximo. Em um servidor de 4 GB de RAM servidor em torno de 1 GB e mais se mais com um máximo por volta de 1200. Em um front-end da web de 64 bits com 8-16 GB de memória, ouvi falar de configurações de 2 GB de RAM ou até mesmo permitindo que funcione, em vez de limitá-lo.

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

Quando um pool de aplicativos atinge o máximo, não é como a configuração do processador máximo. Ele vai dar um ciclo no processo de trabalho, que é como uma pequena reinicialização ou semelhante a um iisreset, mas não, já que às vezes queremos que isso aconteça para que possamos liberar nossa memória. Você realmente não quer pedalar mais do que algumas vezes por período de 24 horas em um mundo ideal. Já ouvi falar de alguns tentando fazer o ciclo logo antes do pico da manhã, para que tenham a maior quantidade de memória disponível, e então um ciclo bem 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 "sem memória".

2
splattne

No Windows 2003, você pode definir Physical Allocation Extension (PAE) para fazer uso de toda a memória. A memória padrão para um apppool IIS6 é 5 MB .

1
user1797