web-dev-qa-db-fra.com

Jardin Web ASP.NET - De combien de processus de travail ai-je besoin?

Quelle est la meilleure pratique pour décider du nombre de processus de travail à autoriser pour une application Web ASP.NET?

Sur un serveur que je gère, la création d'un nouveau AppPool prend par défaut 10 processus de travail (maximum). D'autres personnes suggèrent que le réglage normal est un.

Quel problème les processus de travail multiples résolvent-ils et quelles sont les techniques pour décider du nombre?

61
Tim Long

Les processus de travail sont un moyen de segmenter l'exécution de votre site Web sur plusieurs exes. Vous effectuez cette opération pour plusieurs raisons, une si l'un des travailleurs est gêné par des problèmes d'exécution, il ne supprime pas les autres. Par exemple, si une demande html arrive qui fait que le processus ne se déroule dans rien, seules les autres demandes qui sont traitées par ce processeur de travail sont tuées. Un autre exemple est qu'une requête peut provoquer un blocage sur les autres threads gérés par le même travailleur.

En ce qui concerne le nombre dont vous avez besoin, faites des tests de charge. Frappez durement l'application et voyez ce qui se passe avec un seul. Ensuite, ajoutez-en plus et frappez-le à nouveau. À un moment donné, vous atteindrez un point de saturation réelle du réseau, du disque, du processeur et de la RAM des machines. C'est alors que vous savez que vous avez le bon équilibre.

Par ailleurs, vous pouvez contrôler le nombre de threads utilisés par processus de travail via le fichier machine.config. Je crois que la clé est maxWorkerThreads.

Attention, si vous utilisez une session, l'état de la session n'est pas partagé entre les processus de travail. Je recommande généralement d'éviter la session de toute façon, mais c'est quelque chose à considérer.

À toutes fins utiles, vous pouvez considérer chaque processus de travail comme son propre serveur Web distinct. Sauf qu'ils fonctionnent sur la même case.

54
NotMe

Les directives ici sont plutôt bonnes: http://msdn.Microsoft.com/en-us/library/ms998549.aspx

4
Bryan

Fuites de mémoire

L'autre plus grand avantage est la gestion des fuites de mémoire. Parfois, vous essayez d'optimiser votre code, mais il y a des fuites de mémoire dans le cadre lui-même et dans d'autres bibliothèques tierces. Nous avons remarqué que notre application finit par atteindre une mémoire très élevée et commence à ne donner aucune exception de mémoire.

Nous avons donc dû définir une limite maximale de mémoire virtuelle sur le processus de travail pour aimer 1 Go et autoriser l'exécution de plusieurs processus. Vous pouvez définir une limite virtuelle maximale même pour un processus de travail unique, mais cela conduit à des pics de ralentissement, car lorsque le processus de travail est recyclé, toutes les demandes sont lentes jusqu'à ce que le processus de travail atteigne une bonne vitesse. Comme notre application dispose d'une mise en cache interne (Entity Framework Query Cache, certains pools d'objets), chacune de ces choses ralentit le démarrage de l'application. C'est là que le processus de travailleur unique fait le plus mal.

S'il existe plusieurs processus de travail, un seul des processus en mode recyclage est lent, mais d'autres gardent une bonne vitesse.

4
Akash Kava

Un autre cas où il est logique d'avoir de nombreux processus de travail est si votre application contient des verrous qui empêchent sa parallélisation. Le traitement d'image basé sur GDI + en est un exemple.

Je l'ai trouvé quand j'ai essayé de trouver une solution pour mon problème .

1
Marat Safin