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.
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.
fonte
Nesta postagem do blog "Recomendações para as configurações do pool de aplicativos do SharePoint" :
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".
fonte
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.
fonte
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 .
fonte