Mon client a une application ASP.NET installée sur deux serveurs de production (équilibrée avec NLB, mais ce n'est pas pertinent). Les deux serveurs se bloquent toutes les 3-4 heures avec l'erreur enregistrée par l'observateur d'événements suivante:
Nom de l'application défaillante: w3wp.exe, version: 7.5.7601.17514, horodatage: 0x4ce7afa2
Nom du module défaillant: clr.dll, version: 4.0.30319.18034, horodatage: 0x50b5a783
Code d'exception: 0xc00000fd Décalage d'erreur: 0x000000000001a840
ID de processus défaillant: 0xd50
Heure de démarrage de l'application défaillante: 0x01ce97fe076d27b4
Chemin d'accès à l'application défaillant: c:\windows\system32\inetsrv\w3wp.exe
Chemin d'accès au module défaillant: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll ID de rapport: e0c90a5f-0455-11e3-8f0e-005056891553
Je ne sais pas comment déboguer ni par où commencer. Lorsque le crash est sur le point de se produire, l'utilisation du processeur de serveur passe à 100% et y reste. Le processus en cause est w3wp.exe. Je ne sais même pas si mon code génère l'erreur ou non. C'est IIS 7.5. Tout pointeur serait grandement apprécié.
Il semble que vous ayez une exception StackOverflow, qui est causée par une récursion illimitée (une fonction s'appelant à plusieurs reprises, etc.). Cela ne peut pas être détecté par un bloc try/catch régulier. Vous pouvez suivre le problème en utilisant DebugDiag et WinDbg .
DebugDiag peut être configuré pour générer un vidage sur incident lorsque la StackOverflowException se produit. Téléchargez sur https://www.Microsoft.com/en-us/download/details.aspx?id=49924 .
La prochaine fois qu'une StackOverflowException se produira, vous aurez un vidage sur incident. Maintenant, nous devons interpréter le fichier de vidage.
Les outils de débogage pour Windows font partie du SDK Windows et peuvent être téléchargés sur http://msdn.Microsoft.com/en-US/windows/hardware/gg463009/ .
SRV*your local folder for symbols*http://msdl.Microsoft.com/download/symbols
, mais je viens de mettre dans le dossier local pour les symboles et cela a bien fonctionné..loadby sos clr
!CLRStack
Dans les résultats, il devrait être clair quel est le problème (vous verrez probablement un tas de lignes montrant la ou les fonctions qui ont été appelées à plusieurs reprises).
Quelques ajouts à la réponse ci-dessus. Développer l'extension Explorer qui a obtenu une erreur lors de la connexion de l'utilisateur. Ainsi, pour l'utilisateur, il ressemble à un "écran clignotant" (tandis qu'Explorer essaie de démarrer et de planter, puis de redémarrer, etc.). Connecté sous un autre compte utilisateur installé DebugDiag et WinDbg. J'utilise Windows 8.1 avec .Net 4.0 avec toutes les dernières mises à jour d'aujourd'hui (13 janvier 2014) J'ai essayé de télécharger quelques symboles localement, mais WinDbg ne peut pas charger clr.pdb en raison d'une signature incorrecte.
Résolu en utilisant des symboles en ligne - utilisez "SRV * http://msdl.Microsoft.com/download/symbols " comme chemin des symboles.
Une autre cause pourrait "fonctionner récursivement à l'infini". Lorsque se produit une boucle infitine, Windows essaie d'éviter un blocage et de désactiver le pool d'applications relâché.
J'ai rencontré le même problème aujourd'hui. J'ai une fonction récursive qui liste le projet parentproject-sub. Un projet est défini comme projet parent et lorsque la fonction récursive essaie de répertorier tous les projets parent-sous, une boucle infinie se produit.
J'ai pu vérifier l'Observateur d'événements -> Journaux Windows -> Système et trouver
Le pool d'applications "DankAppPool" est automatiquement désactivé en raison d'une série d'échecs dans le (s) processus desservant ce pool d'applications.
En dessous de cela:
Un processus desservant le pool d'applications "DankAppPool" a subi une erreur de communication fatale avec le service d'activation de processus Windows. L'ID de processus était "5704". Le champ de données contient le numéro d'erreur.
Et:
Le service QueueMonitor s'est arrêté de manière inattendue. Il l'a fait 32 fois. L'action corrective suivante sera prise dans 60000 millisecondes: Redémarrez le service.
Au moins, le service QueueMonitor est un point de départ.