2009-11-11 5 views
2

nous avons une application asp.net, qui fait un usage intensif des services REST/json via httpwebrequest et une utilisation intensive du cache Web. apparemment sporadique, le processus de travail cesse tout simplement de répondre. le navigateur attend une réponse et n'en obtient jamais. seul un redémarrage de l'application semble remédier au problème. il n'y a pas d'exceptions non gérées ou d'autres anomalies que nous avons remarquées. Le seul indice possible que nous avons eu est que nous avons vu des messages «deadlock détecté» dans le journal des événements à un moment donné, mais pas régulièrement. En outre, nous avons éliminé ce que nous pensons être la seule cause possible d'un tel conflit (exécution de plusieurs requêtes http simultanées via la requête begin/end).ce qui peut causer asp.net à cesser de répondre

des idées?

gagner 03 serveur/données édition centrale (sur Amazon EC2) de asp.net 3.5

Répondre

2

Lorsque vous avez une application non conforme à faible cpu utilisé, il est le plus probablement d'un problème de concurrence. Vous avez des blocages qui bloquent tous vos threads, ou vos threads asynchrones prennent une éternité à finir et ThreadPool finit par mourir de faim. Puisque vous utilisez ASP.Net, vous devriez vérifier comment le ThreadPool fonctionne. Vous pouvez regarder les compteurs de performance ou, mieux, joindre à votre application avec windbg (vous pouvez l'obtenir à partir des outils de débogage pour Windows http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx).

Lancement windbg, attache au processus de asp.net puis, dans l'invite de commande:

.loadby mscorwks sos 
!ThreadPool 

Mieux encore, téléchargez l'extension sosex (http://www.stevestechspot.com/CommentView,guid,9fdcf4a4-6e09-4807-bc31-ac1adf836f6c.aspx) et vérifiez Blocages avec

!dlk 

vérifiez les blocages, passez à l'un des threads (à l'aide de l'interface utilisateur ou de la ligne de commande) et saisissez

!CLRStack 

pour afficher une trace de la pile indiquant la méthode qui bloque votre application.

+0

merci pour le pointeur d'outil (sosex). Je soupçonnais d'abord la supercherie, mais cela m'a permis de comprendre ce que c'était. en un mot, si vous avez un écouteur de trace, * et * un appender trace, vous pouvez entrer dans une situation de blocage parce que le truc system.diagnostic et l'appender trace se verrouillent sur 'this', ou l'écouteur. mal. – kolosy

Questions connexes