2012-05-24 4 views
1

Je suis en train de résoudre un problème que j'ai rencontré depuis quelques jours. Chaque fois que l'un de mes sites est reconstruit ou que l'AppPool est recyclé, le premier pageload va pendre à jamais (enfin, j'ai seulement attendu jusqu'à 30 minutes). Cela ne se produit que sur un site particulier sur ~ 10 sites. C'est un site ASP.NET.Le processus IIS Worker est bloqué pour toujours à la première demande

Voici les choses que j'ai observé:

  • Dans IIS Manager sous les processus de travail, je peux voir la demande. Verbe = GET, Sate = ExecuteRequestHandler, Nom du module = ManagedPipelineHandler. Le temps écoulé ne cesse d'augmenter, bien sûr.
  • Si je ferme le navigateur dans lequel j'ai fait la demande initiale et en ouvre un nouveau pour faire une autre demande, la page se chargera instantanément.
  • Dans mon code, le fichier Application_Start de mon fichier Global.asax n'est pas appelé lors de la première requête. Il est appelé à la deuxième demande.
  • Le travailleur proccess est à l'origine de l'utilisation de la mémoire sur ma machine à passer par le toit

Je suis inexpérimenté dans IIS de dépannage, mais des heures et des heures de recherche m'a conduit nulle part.

La seule modification majeure que nous avons apportée récemment au site est que nous avons commencé à implémenter la journalisation à l'aide de log4net. J'ai cependant essayé de supprimer tout code log4net, à la fois de mon fichier web.config et Global.asax - toujours pas de chance.

Est-ce que quelqu'un d'autre l'a expérimenté et si oui, comment l'avez-vous résolu?

Toute aide sera grandement appréciée.

ADD: Si je place un fichier txt à la racine du site et la charge que la première chose après une construction, il se charge instantanément. Cependant, le processus de travail agit toujours exactement comme auparavant et l'utilisation de la mémoire continue à traverser le toit.

modifier final:

Je me sens comme un idiot. Je ne peux pas expliquer pourquoi, mais pour une raison quelconque, mes points de rupture dans Global.asax ont soudainement été touchés et j'ai pu identifier le problème. Il s'agissait d'un appel à une base de données via Entity Framework qui était mal écrit, c'est-à-dire que le filtrage était effectué après que toutes les lignes de la colonne en question aient été récupérées. Et pour le rendre pire, le filtrage a été fait à l'intérieur d'une boucle foreach. Quoi qu'il en soit, maintenant tout est redevenu normal et je suis content.

Répondre

3

Vous avez peut-être déclaré l'évidence mais vous n'avez pas de code idiot dans votre asax global dans l'app_start qui pourrait être à l'origine de cela?

Cela ressemble à une boucle infinie ou quelque chose?

+0

Non, malheureusement, cela ne semble pas si simple. Si j'attache le débogueur au pool d'applications que le site Web utilise et que je place un point d'arrêt sur la toute première ligne du app_start, il ne sera pas touché. Donc, il n'entre même pas dans la méthode. – AndersDaniel

+0

Marquage comme réponse, puisque c'était en fait un code stupide qui l'a causé. J'ai édité ma question originale avec la cause. – AndersDaniel

1

Juste une petite note ce happend dans mon cas:

Ni Process Monitor ni Failed Request Tracing était d'aucune aide. Le site est simplement chargé (presque) pour toujours.

Enfin, après plusieurs minutes d'attente, une erreur est survenue indiquant qu'il "ne peut pas localiser le chemin réseau".

La raison était que j'ai entré une chaîne de connexion à une instance de SQL Server inexistante, de sorte qu'il conserve en quelque sorte la recherche du serveur. Enfin, un délai d'attente s'est produit.

La solution consistait simplement à spécifier le bon SQL Server dans la chaîne de connexion dans Web.Config.

Questions connexes