J'ai rencontré un problème avec notre application ASP.NET où parfois un cas de recyclage tous les soirs le w3wp à suspendre.w3wp se bloque parfois sur le recyclage de nuit
Voici ce qui se passe:
Recycle est déclenchée. évidemment, cela force ThreadAbortException sur tous les threads en cours d'exécution. Cependant, cela ne semble pas déclencher un nouveau w3wp, ou c'est le nouveau w3wp qui lance réellement l'exception (qui n'a pas encore été capable de le reproduire).
Dans mes journaux, je reçois beaucoup de ThreadAbortException, et le nombre de threads monte et monte indéfiniment, ce qui signifie que toute nouvelle requête engendre un nouveau thread qui ne finit jamais. Si cela aurait été l'ancien w3wp, toute nouvelle requête serait routée vers le w3wp nouvellement démarré. Le délai d'arrêt et la protection contre les défaillances rapides ne semblent pas non plus se déclencher, ce qui rend l'unité inaccessible jusqu'à ce qu'elle soit recyclée manuellement. La plupart du temps, il consomme aussi beaucoup de CPU, ce qui rend le serveur pratiquement inutilisable.
Nous utilisons Monorail MVC qui n'a probablement rien à voir avec cela, mais nous utilisons leur système RescueController. Si nous devons attraper involontairement le ThreadAbortException dans notre gestion des erreurs, cela pourrait-il causer une boucle infinie qui bloquerait tellement le w3wp que IIS ne pourrait pas en récupérer?
Vous pouvez vous assurer que vous consignez tous les événements de recyclage. À partir de PowerShell: 'set-webconfigurationproperty /system.applicationHost/applicationPools/applicationPoolDefaults/recycling -name: logEventOnRecycle -value:" Heure, demandes, calendrier, mémoire, IsapiUnhealthy, OnDemand, ConfigChange, PrivateMemory "' –