2017-03-01 3 views
0

Récemment nous voulons répondre au problème de chargement lent d'IIS pour la première demande, après que j'ai fait des recherches, j'ai trouvé que IIS7.5 + a une fonctionnalité nommée "Initialisation d'application" qui peut-être ce dont j'ai besoin.IIS7.5 +: Est-ce la manière correcte de décrire la fonctionnalité d'initialisation d'application?

Cependant, je dois comprendre le mécanisme avant d'essayer de l'appliquer et voici ma compréhension:

Avec le réglage IIS par défaut:

  1. Le pool d'applications de veille au bout de 20 minutes
  2. Le processus de travail correspondant est tué
  3. La première demande est entrée
  4. IIS commence à créer un nouveau processus de travail
  5. IIS commence à charger l'application
  6. Le client peut voir après l'application est chargée

Et l'étape 4, 5 fait la première demande pas si sensible.

avec une application d'initialisation mis:

  1. Le ralenti du pool d'applications au bout de 20 minutes
  2. Le processus de travail correspondant est tué
  3. IIS commence à créer un nouveau processus de travail
  4. IIS commence à charger l'application par le biais d'une "fausse" requête
  5. Premières demandes t vient
  6. Le client peut voir après l'application est chargée

Maintenant, la première demande est sensible comme elle est pas la première requête au serveur, parfois avant qu'il y ait une demande « faux » qui donne le coup chargement de l'application.


Ce que je voudrais savoir est que:

Est-ce que je comprends bien?

Lorsque l'initialisation de l'application est définie, le processus de travail est toujours en cours de suppression, mais un nouveau est créé juste après, est-ce le cas?

Répondre

2

Sans l'initialisation de l'application, comme vous l'avez mentionné, une fois le processus de travail tué, il n'est pas redémarré jusqu'à ce qu'une demande lui soit envoyée. , un nouveau processus de travail (W3WP.exe) est démarré et il commence à charger l'application, et ce démarrage à froid de l'application st demande moins sensible. Par exemple. S'il s'agit d'une application ASP.NET, la première demande déclenche la recompilation des fichiers ASP.NET temporaires, ce qui peut prendre plusieurs secondes dans une application d'entreprise modérément grande.

Si vous regardez la configuration de l'initialisation d'application, vous verrez qu'il ya deux parties principales il:

  1. Vous devez définir le startmode du pool d'applications associé au site à AlwaysRunning
  2. Vous devez définir preloadEnabled true sur un certain chemin (chemin vers le site) sur le ApplicationPool

L'étape 1 indique à IIS de redémarrer automatiquement le processus de travail IIS chaque fois qu'il y a un redémarrage ou un IISReset. (Vous pouvez facilement voir ceci dans l'action dans TaskManager - faites seulement l'étape 1 et faites un IISReset, vous devriez voir le processus existant de W3WP.exe étant enlevé et un nouveau est créé)

L'étape 2 est ce qui indique à IIS pour faire la demande fausse/factice initiale qui fera toute l'initialisation requise de votre application web. Par exemple. pour une application ASP.NET, cela déclenchera essentiellement la compilation de tous les fichiers ASP.NET, de sorte que la demande suivante - la première requête réelle à la page ne subisse pas les longs délais associés à l'initialisation de l'application.

S'il est vrai qu'une approche traditionnelle consistant à utiliser un script pour interroger l'application afin de l'empêcher de rester inactive peut faire l'affaire, le module ApplicationInitalization facilite le travail. Vous pouvez même demander à IIS d'envoyer la requête factice à un script d'échafaudage personnalisé qui fait beaucoup plus qu'un simple chargement de page - préchargez un cache de plusieurs pages Web, générez/effectuez n'importe quelle tâche qui pourrait autrement prendre plus de temps ...

ici: officiels documentations

IIS 7.5

IIS 8.0

1

Votre compréhension est correcte basée sur mes expériences. Je suis tombé sur cette capacité dans un scénario de test de performance retour en 2014. Je codais mesure la partie de ping cela en emplois de surveillance: O

« L'initialisation du module d'application permet essentiellement d'activer préchargement sur le pool d'applications et l'application Site/IIS, qui déclenche une requête via le pipeline IIS dès que le pool d'applications a été lancé, ce qui signifie que votre ASP.application NET devient immédiatement actif, Application_Start est tiré vous assurer que votre application reste en marche à tout moment « -. Rick Strahl

Official detailed docs sont sur le site MSDN, de ce que je vois pas grand-chose a changé entre IIS 7.5 et 8.0 à la manière de la config