Quelle est la mémoire maximale qu'un site Web / pool d'applications IIS6 peut utiliser?

8

J'ai un serveur IIS 6 fonctionnant sur Windows 2003 SP2 x86. Le serveur dispose de 4 Go de RAM et fonctionne de manière cohérente avec 2 Go alloués.

Je me rends compte qu'avec x86, le serveur n'utilisera pas tous les 4 Go de RAM et l'espace d'application est également limité mais les processus IIS semblent être limités ailleurs. w3wp.exe n'a jamais plus de 500 Mo alloués et j'obtiens parfois des exceptions OutOfMemory d'une application .NET occupée (plusieurs applications sont en cours d'exécution, chacune avec un pool d'applications distinct).

Quelle est la mémoire maximale qu'un site Web / pool d'applications IIS6 peut utiliser?

Robin M
la source

Réponses:

7

Les applications sous Windows x86 sont limitées à 2 Go / ch. Vous pouvez changer cela en ajoutant l'indicateur / 3gb à boot.ini, mais cela peut provoquer un comportement d'application inattendu et doit être utilisé avec prudence. MS ne prend officiellement pas en charge cela ( http://technet.microsoft.com/en-us/library/bb124810.aspx )

Les limites de mémoire d'IIS peuvent être définies sous l'onglet Recyclage dans le pool d'applications correspondant.

Comment déterminez-vous que l'application ne dépasse jamais 500 Mo? Si vous utilisez le Gestionnaire des tâches, gardez à l'esprit qu'il s'agit rarement (voire jamais) d'une représentation précise de l'utilisation de la mémoire telle que Windows la comprend. Utilisez Process Explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Il existe un certain nombre d'autres questions pertinentes:

  • Des erreurs sont-elles enregistrées dans vos journaux d'événements?
  • S'agit-il d'une ligne de code particulière levant les exceptions? Si tel est le cas, cette exception OutOfMemory est-elle réellement un problème IIS ou un problème de code?
  • Limitez-vous vos pools d'applications avec le paramètre Recyling?
  • Y a-t-il d'autres services en cours d'exécution sur cette machine?

Très probablement, IIS, ASP.NET et tous leurs bagages associés se heurtent à la limite de 2 Go, même si le Gestionnaire des tâches de Windows ne l'affiche pas. La définition de limites de recyclage ou la mise à niveau vers x64 fera probablement une énorme différence.

sh-beta
la source
3

obtenir occasionnellement des exceptions OutOfMemory à partir d'une application .NET occupée

La réponse à cette question est trop complexe pour tenir dans une réponse. Voir « Optimisation des performances des applications .NET » pour un traitement complet du sujet.

Voici un résumé largement simplifié (mais toujours assez bon) de Bruno Jouhier :

De plus, le runtime .NET ne vous laisse pas aller jusqu'à 2 Go. Le garbage collector fonctionne en copiant des objets vivants, il a donc besoin d'une bonne quantité d'espace pour effectuer ses copies.

Éditer:

Voici ma tentative d'explication ...

Si vous vous demandez quelle est la taille maximale de la mémoire du processus de travail (telle que rapportée par le Gestionnaire des tâches) pour un processus de travail ASP.NET sur x86, la réponse est "cela dépend" .

Dans tout type de code managé tel que Java ou .NET, le programmeur abandonne le contrôle fin de la mémoire comme pénitence pour ne pas avoir à traiter avec des pointeurs. Lors de l'exécution d'un programme, le tas et la pile sont nettoyés périodiquement par le garbage collector .

En ce qui concerne spécifiquement ASP.NET, le garbage collector s'exécute à l'intérieur du même processus de travail que le site Web. Le GC consomme sa propre mémoire. La quantité de mémoire est entièrement fonction de la façon dont le code de votre application est écrit. Une application peut utiliser 1,8 Go de mémoire tandis qu'une autre peut s'étouffer à 500 Mo. Pour comprendre pourquoi , vous devez profiler votre application spécifique.

Portman
la source
Je suis d'accord que le débogage des exceptions OutOfMemory est complexe - merci pour le lien. Cependant, je demande comment la mémoire est limitée et il devrait être possible d'y répondre.
Robin M
2

Tout processus sur un système d'exploitation Windows x86 est limité à 2 Go, sauf si vous avez défini le commutateur / 3 Go dans votre fichier boot.ini, auquel cas un processus peut utiliser 3 Go.

Steve Evans
la source
Oui, mais je suis loin de 2 Go pour un processus?
Robin M
2

De cet article de blog "Recommandations pour les paramètres du pool d'applications SharePoint" :

En me concentrant sur le physique, j'aime généralement limiter les pools d'applications autour de 800 Mo à 1200 Mo maximum sur une application 32 bits avec très peu de pools d'applications en fonction du nombre et de la quantité de mémoire. Sur un serveur avec 2 Go de RAM, je le définirais à environ 800 Mo maximum. Sur un serveur RAM de 4 Go environ 1 Go et plus si plus avec un maximum autour de 1200. Sur un serveur Web frontal 64 bits avec 8-16 Go de mémoire, j'ai entendu parler de paramètres de 2 Go de RAM ou même de le laisser le laisser rouler, plutôt que de le limiter.

Vous devez vraiment le profiler car ceux-ci peuvent vraiment évoluer pour être traités et mis en cache. Plus la quantité de mémoire est élevée et plus la charge est élevée, plus le processus de travail augmentera. Lorsque les gens demandent comment configurer le pool d'applications, c'est là qu'ils demandent généralement quels devraient être les chiffres. Ce que vous faites ici est de limiter explicitement le pool d'applications de consommer plus de mémoire. Notez que ce paramètre est sur l'onglet de recyclage, il y a une raison à cela.

Lorsqu'un pool d'applications atteint le maximum, il ne ressemble pas au paramètre de processeur maximum. Cela fera tourner le processus de travail qui est comme un minuscule redémarrage ou similaire à un iisreset, mais pas car parfois nous voulons que cela se produise afin que nous puissions libérer notre mémoire. Vous ne voulez vraiment pas faire du vélo plus de deux fois par période de 24 heures dans un monde idéal. J'ai entendu certains essayer de faire un cycle juste avant le pic du matin afin qu'ils aient le plus de mémoire disponible, puis un cycle à la fin de la journée avant le début des sauvegardes ou de l'exploration.

D'après mon expérience, 800 Mo est le seuil pour les machines 32 bits (2-4 Go de RAM). Il recycle les pools d'applications avant de lever les exceptions de «mémoire insuffisante».

splattne
la source
2

Assurez-vous que vous ne définissez pas la taille de la mémoire virtuelle sur votre pool d'applications. Si vous définissez cette valeur sur un nombre en dehors de la plage autorisée, elle reviendra à 512 Mo. Voir KB923197 .

Notez également que si vous exécutez une application ASP.Net, ASP.Net recyclera le pool à 60% de la limite de mémoire de 2 Go, soit 1,2 Go. Ce n'est pas votre scénario ~ 500, mais sur les pools d'applications 32 bits avec une grande utilisation de la mémoire, nous tweekons parfois cela pour obtenir un peu plus de mémoire.

<system.web> 
  <processModel memoryLimit="80" />
</system.web> 
Christopher_G_Lewis
la source
1

Sous Windows 2003, vous pouvez définir l' extension d'allocation physique (PAE) pour utiliser toute la mémoire. La mémoire par défaut pour un apppool IIS6 est 5MB .

Communauté
la source
D'accord, mais cela n'explique pas pourquoi le processus est limité à 500 Mo. La mémoire par défaut d'un pool d'applications est intéressante mais pas vraiment pertinente ou utile, désolé!
Robin M
Utilisez-vous SQL sur la même boîte par hasard?
Non. SQL n'est pas sur la même case. Il est limité au web / ftp / smtp utilisant IIS.
Robin M