Meilleures pratiques du pool d'applications IIS 7.x

24

Nous sommes sur le point de déployer un tas de sites sur de nouveaux serveurs. J'ai les questions suivantes sur les pools d'applications:

  1. Il semble conseillé d'avoir un pool d'applications par site Web. Y a-t-il des réserves à cette approche? Un pool d'applications monopolisera-t-il tout le CPU, la mémoire, etc.?

  2. Quand devez-vous autoriser plusieurs processus de travail dans un pool d'applications? Quand ne devriez-vous pas?

  3. La limite de mémoire privée peut-elle être utilisée pour empêcher un pool d'applications d'interférer avec un autre? Une valeur trop basse entraînera-t-elle des demandes valides de recyclage du pool d'applications sans obtenir de réponse valide?

  4. Quelle est la différence entre les limites de mémoire privée et virtuelle?

  5. Existe-t-il des raisons impérieuses de NE PAS exécuter un pool d'applications par site?

Eric Burcham
la source
Première question à vous poser: s'agit-il de sites Web (ex.: .Htm / .js) ou d'applications Web (ex. .Aspx / .php)?
Coding Gorilla
Principalement des applications .Net 3.5. L'une est une application PHP tierce.
Eric Burcham
1
C'est une sorte de large éventail de sujets - Le sujet (et les réponses de @ CodingGorilla) sont intéressants, mais il pourrait ne pas être le mieux adapté au style Q-and-A de
SF

Réponses:

20

1) Il semble conseillé d'avoir un pool d'applications par site Web. Y a-t-il des réserves à cette approche? Un pool d'applications, par exemple, peut-il monopoliser tout le CPU, la mémoire, etc.?

C'est une assez bonne approche; il n'y a pas de bonnes raisons pour lesquelles je peux penser que différents "sites" (applications) partagent le même pool. Sauf s'ils ont besoin de partager une seule ressource quelconque. Une application pourrait théoriquement monopoliser beaucoup de CPU ou de mémoire, mais changer la façon dont les applications sont mises en commun n'affectera pas vraiment beaucoup.

2) Quand devez-vous autoriser plusieurs processus de travail dans un pool d'applications. Quand ne devriez-vous pas?

Il vaut mieux laisser seul, en utilisant les paramètres par défaut. Sauf si vous savez vraiment ce que vous faites, cela peut avoir un impact négatif sur votre site Web / application.

3) La limite de mémoire privée peut-elle être utilisée pour empêcher un pool d'applications d'interférer avec un autre? Une valeur trop basse entraînera-t-elle des demandes valides pour recycler le pool d'applications sans obtenir de réponse valide?

a) Théoriquement

b) Oui, le régler à un niveau inférieur peut avoir des effets négatifs. Encore une fois, sauf si vous avez des besoins spécifiques et savez ce que vous faites, laissez-les tranquilles.

4) Quelle est la différence entre les limites de mémoire privée et virtuelle?

C'est très compliqué, voici un petit article que j'ai trouvé qui pourrait aider: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/

5) Y a-t-il des raisons impérieuses de NE PAS exécuter un pool d'applications par site?

Encore une fois, la seule raison pour laquelle je peux penser est qu'il existe une sorte de «ressource partagée» dont les multiples applications ont besoin, alors vous voudrez les exécuter dans le même processus.

Pour les applications et les sites Web à usage général, IIS est assez bien configuré avec ses valeurs par défaut.

****MISE À JOUR****

En ce qui concerne votre demande d'informations supplémentaires sur # 2, vous ne devriez pas le faire, sauf si vous en avez un besoin spécifique. Même avec des actions de serveur qui prennent du temps, les requêtes sont servies à l'aide de plusieurs threads, et vous voudrez utiliser des "requêtes asynchrones" pour gérer les tâches de longue durée (ce qui libère un thread de pool de threads pour gérer d'autres requêtes). De manière réaliste, je ne vois aucune bonne raison d'autoriser plusieurs processus pour un seul pool.

Une fois que vous commencez à parler de plusieurs processus, vous risquez de tomber sur des choses comme: la perte de l'état de session car une session est active dans le processus 1, mais la demande est gérée par le processus 2. Ou pire encore, vous devez comprendre comment faire de la communication inter-processus, ce qui est vraiment pénible.

Peu importe ce que vous proposez en ce qui concerne une raison pour plusieurs processus, je serais prêt à parier qu'il existe une meilleure façon de le gérer (plutôt que de lancer un autre processus).

Coding Gorilla
la source
J'apprécie la réponse réfléchie et je l'ai acceptée. Si vous avez des informations plus spécifiques sur # 2, je vous en serais reconnaissant. «Mieux vaut rester seul» est certainement un sage conseil, mais il serait bon de savoir quand utiliser plusieurs processus de travail. Je suppose que cela est plus pertinent lorsque certaines actions de serveur prennent beaucoup de temps pour renvoyer une réponse, comme un gros rapport, un service Web qui accepte des publications volumineuses, etc. Je suppose également que tous les trucs de concurrence de threads normaux s'appliquent?
Eric Burcham
Juste pour ajouter: si vous vous attendez à ce que vos applications jouent mal ensemble, la boîte de dialogue d'installation pour IIS note que le Gestionnaire de ressources système Windows peut être installé et utilisé pour limiter l'utilisation du processeur et de la mémoire par les pools d'applications.
TristanK
@TristanK, merci pour l'astuce. C'était extrêmement utile.
Eric Burcham
@Coding Gorilla - Merci encore pour la perspicacité. J'ai décidé de creuser sérieusement «pourquoi utiliser un jardin Web» et j'ai trouvé plusieurs réponses. Toutes les mises en garde que vous avez mentionnées s'appliquent, en particulier concernant l'accès asynchrone aux ressources partagées telles que les caches et les sessions utilisateur. La fonctionnalité de jardin Web vous permet essentiellement de charger les demandes d'équilibrage sur un seul serveur avec plus que sur le cœur. Ainsi, vous devez gérer toutes les mises en garde que vous traitez normalement dans un scénario à charge équilibrée, à l'exception du routage des demandes.
Eric Burcham
@Coding Gorilla - Suite ... La meilleure "raison" que j'ai trouvée pour utiliser la fonction de processus à plusieurs travailleurs est d'augmenter les performances. Consultez ce lien: iis-aid.com/articles/performance_testing/… . Bien sûr, vous feriez mieux de savoir ce que vous faites avec tous les aspects asynchrones de la programmation que nous négligeons souvent de prendre en compte avec les sites Web, car la plupart d'entre eux (au moins pour commencer) exécutent un seul thread de travail. La réponse courte à ma question est donc la suivante: essayez-la si vous rencontrez des problèmes de performances.
Eric Burcham
4

Je configure toujours un pool d'applications dédié pour un site Web. Les scénarios d'hébergement de sites Web à faible coût sont ceux où il est logique d'avoir un grand nombre de sites par pool d'applications.

Les limites de mémoire ne sont en réalité que des seuils de sécurité primitifs pour empêcher un site de consommer toutes les ressources système. Notez qu'il s'agit davantage d'un problème potentiel sur Windows 2008 R2 x64 que sur IIS 6.0 x86, car les applications x86 avaient un plafond de mémoire naturel de 2 Go. Il est beaucoup plus facile sur IIS 7.5 pour une application avec une fuite de mémoire de consommer de grandes quantités de mémoire.

Je ne suis pas non plus un grand fan du recyclage des pools d'applications. Si j'ai un pool d'applications et que je suis la seule application en cours d'exécution, s'il n'y a rien de mal avec notre code, il n'est probablement pas nécessaire de recycler le pool d'applications. Et s'il y a un défaut dans l'application, l'ultime action appropriée serait de corriger le code.

Greg Askew
la source
Merci d'avoir signalé le plafond de 32 bits de la mémoire. Je ne sais pas comment j'oublie ces choses. Je pense également que la bonne approche si vous avez une application suffisamment défectueuse pour planter un pool d'applications est de la réparer, en supposant que vous avez accès au code. J'apprécie les conseils!
Eric Burcham
Nous avons fait nos propres tests. L'exécution d'un pool d'applications semble avoir une surcharge d'environ 64 Ko par pool d'applications au-dessus de l'exécution des applications toutes dans le même pool d'applications. C'est sur une période d'échantillonnage de 12 heures en utilisant un moniteur de performances pour surveiller la consommation de mémoire. C'était sur un serveur 64 bits. Je pense que si ce test simple s'avère correct, le coût en ressources d'un pool d'applications par application est fondamentalement négligeable sur le matériel moderne.
Eric Burcham