2014-06-13 3 views
2

Je rencontre des problèmes de performances avec mon serveur Web iis. Il est suspendu au hasard et j'essaie de comprendre comment accélérer le serveur. J'ai activé le suivi des demandes ayant échoué sur le serveur et l'ai configuré pour générer un journal lorsque la requête dure plus de 3 secondes. Les journaux résultants (xml) ne s'affichent pas beaucoup mais il existe un point dans le journal des performances compact qui indique la partie du journal sur laquelle le serveur est suspendu. Voici la partie du journal où la perte de temps importante se produit.iis 7.5 demandes de suspension ASP.net

65. i GENERAL_GET_URL_METADATA PhysicalPath="", AccessPerms="513" 17:46:32.577

66. i HANDLER_CHANGED OldHandlerName="", NewHandlerName="ExtensionlessUrlHandler-Integrated-4.0", NewHandlerModules="ManagedPipelineHandler", NewHandlerScriptProcessor="", NewHandlerType="System.Web.Handlers.TransferRequestHandler" 17:46:32.577

67. i VIRTUAL_MODULE_UNRESOLVED Name="FormsAuthentication", Type="System.Web.Security.FormsAuthenticationModule" 17:46:47.771

Je ne suis pas sûr de ce gestionnaire a changé est, mais il prend beaucoup de temps, des conseils serait génial sur l'endroit où commencer à chercher.

+0

Avez-vous des éléments iFrame dans vos WebForms? –

+0

Non pas que je connaisse – bischoffingston

+0

Vérifiez quand recpool recycle et quelle heure cela prend pour cela. – Amit

Répondre

1

Il existe plusieurs façons d'améliorer les performances du serveur. Mais avant cela, vous devriez commencer par vérifier l'utilisation du processeur pendant le "blocage". Une boucle infinie dans le code de l'application peut provoquer ce comportement. À moins qu'il y ait des E/S, des verrouillages ou des interruptions dans la boucle, vous pourrez les voir à partir de l'utilisation du processeur, car vous obtiendrez exactement la valeur de l'unité centrale utilisée pour chaque boucle infinie.

Help link to improve server performance

Plus d'info: Je peux voir l'entrée en relation avec module virtuel SUSPENS: qui est lié à une mauvaise utilisation de Response.Redirect (url); Assurez-vous également que vous avez déployé votre application en mode intégré sur IIS. Voici une liste de contrôle simple que vous pourriez vouloir reconsidérer: Toujours pré-compiler votre site, par opposition à le copier! N'exécutez pas l'application de production avec debug = "true" activé, lorsque l'indicateur de débogage est true dans votre fichier web.config. Beaucoup plus de mémoire est utilisée dans le fichier .Config. application à l'exécution, et puisque certains chemins de débogage supplémentaires sont activés, les codes peuvent s'exécuter beaucoup plus lentement Vérifiez votre fichier Web.config pour vous assurer que la trace est désactivée dans la section IIS 7.5 est livré avec le Auto-Start Feature. WAS (Windows Process Activation Service) démarre tous les pools d'applications configurés pour démarrer automatiquement, assurez-vous que votre pool d'applications est configuré pour AlwaysRunning dans IIS 7.5 applicationHost.config, check out here pour plus de détails.

Chaque serveur asp.net peut être bien configuré par le fichier aspnet.config situé à la racine du dossier framework. Assurez-vous que la preuve d'éditeur pour la sécurité d'accès au code (CAS) est définie sur false dans votre fichier aspnet.config. Cela peut augmenter le chargement initial de la page lorsque vous redémarrez le pool d'applications ASP.NET. vous pouvez lire more about it here.

vous pouvez également essayer Application Initialization Module for IIS 7.5, ce module disponible sur IIS 8.0 peut diminuer le temps de réponse pour les premières demandes par travailleur préchargement processus

+0

Le processeur ne fait pas beaucoup sur le chargement de la première page. Le site est assez simple et devrait être très rapide, il y a très peu de code d'application personnalisé sur le framework asp.net. – bischoffingston

6

Il est difficile de trouver une solution sans avoir aucune pièce de code en vue. Voici quelques conseils généraux que vous pouvez suivre afin d'avoir de bonnes performances avec une application ASP.NET.

  • Le moyen le plus rapide de faire une demande est de ne pas le faire en premier lieu. Essayez de mettre en cache tout ce qui peut être mis en cache.Il existe des caches côté serveur et des caches côté client. Chacun a ses propres utilisations, mais vous n'êtes pas limité à un seul type.
  • Assurez-vous de ne pas mettre en cache et/ou conserver en mémoire les références de tout objet lié à la requête. ASP.NET a un nombre limité de requêtes simultanées et conserver une référence de requête en mémoire bloquera votre serveur s'il manque de threads
  • Fermez la requête dès que vous en avez fini
  • Tout ce dont vous n'avez pas besoin le client au moment de la demande doit être fait en arrière-plan
  • Assurez-vous de ne pas avoir de fuite de mémoire dans votre application. Garbage Collections sont souvent la cause de blocages dans l'application ASP.NET. Lors de la collecte des ordures, tous les threads en cours sont suspendus. Cela est particulièrement vrai pour les collections de garbage Gen 2. Vous pouvez enable background generation 2 garbage collections.
  • Isolez le code problématique. Utilisez un profileur et déterminez quel type de requête requiert beaucoup de ressources. Ensuite, creuser plus profondément et voir ce que cette requête fait à l'intérieur ralentit.
  • Dans toute application équilibrée, les objets doivent être de courte durée et vivre éternellement. Dans le cas d'une application ASP.NET, les objets créés au cours d'une requête devraient idéalement mourir dans cette requête ou lors de la prochaine génération de génération 0.
  • Considérez la mise en pool d'objets pour les objets volumineux et les objets dont l'initialisation est longue
  • Assurez-vous que votre piscine d'application n'a pas totalement plantage et redémarre (regarder les journaux IIS et/ou les événements Windows)

Certains outils de débogage utiles que vous pouvez utiliser:

  • LeanSentry. Idéal pour le diagnostic du serveur ASP.NET se bloque
  • windbg. Courbe d'apprentissage élevée mais de loin l'outil de débogage le plus puissant que vous pouvez utiliser
  • PerfView. Utile pour analyser les événements ETW comme l'utilisation des E/S ou du CPU
+0

Désolé, il ne me laissera pas appliquer complètement la prime après son expiration et j'ai été absent pendant un moment. Au moins, je ne peux pas trouver un moyen d'appliquer la prime complète. – MichaelGG

+0

Pas de problème Michael :) – slvnperron