Como limitar a memória usada por um aplicativo no IIS?

15

Os processos de trabalho do IIS estão consumindo muita memória em nossos servidores. Quero limitar a memória que cada aplicativo pode usar. Estou confuso se devo definir um limite no limite de memória virtual ou no limite de memória privada. Cada aplicativo em nosso IIS está em seu próprio pool de aplicativos.

Se eu definir o limite de memória privada para 500 MB e o limite de memória virtual para 3 GB. Quando o pool de aplicativos é reciclado? Recicla após atingir 500 MB ou 3 GB.

Kishore
fonte
Onde estão essas opções de 'Limite de memória virtual' e 'Limite de memória privada' de que você fala?
Coronel Panic
1
@ColonelPanic No IIS7.5, eles estão na Advanced Settings -> Recyclingseção de um pool de aplicativos .
Ng

Respostas:

15

O IIS respeitará esses dois limites.

Se você definir um limite de 500 MB de bytes particulares, assim que um processo de trabalho tentar confirmar 501 MB, o IIS ativará um novo processo de trabalho e eliminará o antigo.

Se você definir um limite de 3 GB de memória virtual, assim que um processo de trabalho tentar reservar 3.001 GB, o IIS ativará um novo processo de trabalho e eliminará o antigo.

Se você estiver em uma plataforma de 64 bits, saiba que o aplicativo ASP.NET reserva agressivamente a memória virtual. Como exemplo, eu tenho um aplicativo em um farm que usa apenas 88 MB de bytes privados, mas está no tamanho virtual de 5,4 GB no momento. Eu acredito que a reserva de memória virtual é uma função da RAM física no servidor. Também é importante entender que, em uma plataforma de 64 bits, reservar grandes porções de memória virtual não causa impacto no desempenho.

Basicamente, se você estiver com problemas de consumo de memória em um servidor IIS, a configuração que você deseja limitar é Memória Privada / Bytes, isto é o que corresponde ao uso real da memória.

Dominic D
fonte
Obrigado Dominic, Existe uma maneira de definir um processo para usar a memória privada de 500Mb e, quando ultrapassar esse limite, comece a usar a memória virtual no disco sem reciclar?
Kishore
1
Não que eu saiba. Em um aplicativo ASP.NET, uma vez que você começa a ter problemas de bytes de confirmação, você basicamente tem 3 opções. 1. Recicle o processo quando atingir o limite ou todas as noites em um horário de folga (obviamente não é o preferido, e não se esqueça de gerenciar os dados da sessão corretamente se estiver reciclando durante uma janela de uso) 2. Obtenha memória física adicional para o aplicativo (adicione RAM para o farm de servidores ou para outro farm, essa pode ser a solução mais simples, dependendo da sua situação). 3. Modifique o aplicativo para que ele use a memória com mais eficiência. (Melhor opção, mas pode ser difícil de implementar)
Dominic D
Também notei a reserva agressiva de memória em vários aplicativos ASP.NET. Alguém pode recomendar alguns bons recursos sobre este tópico para estudar? Gostaria de entender mais sobre como e por que isso acontece ... O que observo é que, quanto mais memória houver disponível, mais memória os aplicativos alocam.
Tom Pažourek