Comment limiter la mémoire utilisée par une application dans IIS?

17

Les processus de travail IIS prennent beaucoup de mémoire sur nos serveurs. Je souhaite limiter la mémoire que chaque application peut utiliser. Je ne sais pas si je dois définir une limite sur la limite de mémoire virtuelle ou la limite de mémoire privée. Chaque application dans notre IIS est sur son propre pool d'applications.

Si je fixe la limite de mémoire privée à 500 Mo et la limite de mémoire virtuelle à 3 Go. Quand le pool d'applications est-il recyclé? Recycle-t-il après avoir atteint 500 Mo ou après avoir atteint 3 Go.

kishore
la source
Où sont ces options «Limite de mémoire virtuelle» et «Limite de mémoire privée» dont vous parlez?
Colonel Panic
1
@ColonelPanic Sur IIS7.5, ils sont sous la Advanced Settings -> Recyclingsection d' un pool d'applications .
ngm

Réponses:

16

IIS respectera ces deux limites.

Si vous définissez une limite d'octets privés de 500 Mo, dès qu'un processus de travail tente de valider 501 Mo, IIS lancera un nouveau processus de travail et tuera l'ancien.

Si vous définissez une limite de mémoire virtuelle de 3 Go, dès qu'un processus de travail tente de réserver 3 001 Go, IIS lancera un nouveau processus de travail et tuera l'ancien.

Si vous êtes sur une plate-forme 64 bits, vous devez savoir que la mémoire virtuelle de l'application ASP.NET est agressive. À titre d'exemple, j'ai une application sur une batterie de serveurs qui utilise seulement 88 Mo d'octets privés, mais elle est actuellement à 5,4 Go de taille virtuelle. Je crois que la réservation de mémoire virtuelle est une fonction de la RAM physique sur le serveur. Il est également important de comprendre que sur une plate-forme 64 bits, la réservation de grandes portions de mémoire virtuelle n'a aucun impact sur les performances.

Fondamentalement, si vous rencontrez des problèmes de consommation de mémoire sur un serveur IIS, le paramètre que vous souhaitez limiter est Mémoire privée / octets, c'est ce qui correspond à l'utilisation réelle de la mémoire.

Dominic D
la source
Merci Dominic, existe-t-il un moyen de définir un processus pour utiliser la mémoire privée de 500 Mo et une fois qu'il a dépassé cette limite, commencer à utiliser la mémoire virtuelle sur le disque sans recyclage?
kishore
2
Pas que je sache. Dans une application ASP.NET une fois que vous commencez à avoir des problèmes d'octets de validation, vous avez essentiellement 3 options. 1. Recyclez le processus lorsque vous atteignez la limite ou tous les soirs à une heure de repos (ce n'est évidemment pas préférable, et n'oubliez pas de gérer correctement les données de session en cas de recyclage pendant une fenêtre d'utilisation) 2. Obtenez de la mémoire physique supplémentaire pour l'application (ajoutez de la RAM vers une batterie de serveurs ou passer à une batterie différente, cela peut être la solution la plus simple selon votre situation). 3. Modifiez l'application de sorte qu'elle utilise la mémoire plus efficacement. (Meilleure option, mais peut être difficile à mettre en œuvre)
Dominic D
J'ai également remarqué la réservation agressive de mémoire dans plusieurs applications ASP.NET. Quelqu'un peut-il recommander de bonnes ressources sur ce sujet à étudier? J'aimerais mieux comprendre comment et pourquoi cela se produit ... Ce que j'observe, c'est que plus il y a de mémoire disponible, plus les applications allouent de mémoire.
Tom Pažourek