ASP.NET Site web de Ralentir les Performances sur le serveur de production
Mon problème est que mon ASP.NET site web est en cours d'exécution plus lent sur mon serveur de production relativement sur mon serveur de développement.
Une page qui s'exécute dans 120ms dans mon environnement de développement prend 400ms à exécuter sur le serveur. J'ai suivi le SQL server avec le profiler et de la requête en cours d'exécution sur la page de prise de 400ms sur le serveur prend seulement environ 50ms à la fin - j'ai donc convaincu moi-même que mon problème ne réside pas avec le serveur SQL.
Ma machine de développement est un Intel I7 avec 6 GO de RAM, le serveur de production est un 2x AMD Quad Core avec 16 GO de ram.
Comment êtes-vous en mesure de la vitesse?
Chronomètre dans un HttpModule, fondamentalement, le temps mesuré est combien de temps il faut aller de l'BeginRequest à l'événement EndRequest.
J'ai essayé de lancer quelques tests sur une page vierge dans mon projet sur le serveur. 1. J'ai installé une simple boucle avec un calcul très simple à l'intérieur, ce serait en fait une exécution plus rapide sur le serveur que sur ma machine de développement. 2. J'ai changé la boucle pour appeler une fonction à partir de mon classlib extrait les informations de la base de données. cela a été plus lente sur le serveur. 3. Je l'ai changé à nouveau, mais cette fois, l'appel d'une fonction qui n'a aucune interaction avec le serveur, il était encore plus lent sur le serveur. Peut-être qu'il a quelque chose à faire avec ma classe de lib? Toutes les bonnes idées sur comment le résoudre?
sur le troisième essai, par aucune interaction avec le serveur, je ne voulais pas d'interaction avec la base de données.
Juste pour clarifier, l'ensemble du site est plus lent et pas seulement une page utilisée dans l'exemple.
Chronomètre dans un HttpModule, fondamentalement, le temps mesuré est combien de temps il faut aller de l'BeginRequest à l'événement EndRequest.
J'ai essayé de lancer quelques tests sur une page vierge dans mon projet sur le serveur. 1. J'ai installé une simple boucle avec un calcul très simple à l'intérieur, ce serait en fait une exécution plus rapide sur le serveur que sur ma machine de développement. 2. J'ai changé la boucle pour appeler une fonction à partir de mon classlib extrait les informations de la base de données. cela a été plus lente sur le serveur. 3. Je l'ai changé à nouveau, mais cette fois, l'appel d'une fonction qui n'a aucune interaction avec le serveur, il était encore plus lent sur le serveur. Peut-être qu'il a quelque chose à faire avec ma classe de lib? Toutes les bonnes idées sur comment le résoudre?
sur le troisième essai, par aucune interaction avec le serveur, je ne voulais pas d'interaction avec la base de données.
Juste pour clarifier, l'ensemble du site est plus lent et pas seulement une page utilisée dans l'exemple.
OriginalL'auteur cralexns | 2009-08-27
Vous devez vous connecter pour publier un commentaire.
Il ya certains points que vous pouvez envisager pour l'amélioration de la performance de votre site web.
ASP.NET Gère l'état de la session automatiquement. Toutefois, dans le cas où vous n'avez pas besoin de Séances, la désactivation, il contribuera à l'amélioration de la performance
Les Exceptions sont une belle façon de gérer les erreurs qui se produisent dans la logique de l'application. Cependant, de lever des exceptions est coûteuse en ressources et doit être évitée. L'utilisation des exceptions spécifiques et d'utiliser aussi faible que possible pour éviter la surcharge des ressources
Edit:
mesurer la performance de votre site à l'aide de ce site internet
http://www.websiteoptimization.com/services/analyze/
http://www.websitepulse.com/
OriginalL'auteur Muhammad Akhtar
Avez-vous vérifié que le debug=false dans votre site web.config?
Est le serveur 64 bits?
Essayez de créer un pool d'applications dédié à votre application et de définir le pool d'applications de s'exécuter en 32 bits en mode classique.
Fait que toutes les différences?
Est vous classe pré-compilés ou avez-vous mis en place pour compiler au moment de l'exécution?
J'ai essayé de changer cette valeur, il ne fait pas beaucoup de différence.
Ajout de 2 plus d'options dans ma réponse.
J'ai essayé les deux pré-compilé, ou simplement de copier les fichiers du projet, qui n'a vraiment fait une différence de la première fois qu'une page se tourne. À la fois de développement et de production est de 64 bits, vous ne savez pas exactement ce que tu veux dire par 32 bits en mode classique mais le réglage du pipeline classique déclenche une exception avec une erreur de configuration, à me dire qu'il ne peut pas trouver un de mes assemblages. J'ai changé Activer les Applications 32 Bits de VRAI, c'était FAUX avant, ce qui semble avoir subi un boost de performance, ce qui a été ~400ms avant, est maintenant ~300ms, pas encore de la 120ms de mon serveur de dev si.
Également changé la sur ma machine de développement, et c'est encore plus rapide, mais cela signifie également que l'age de performance est inchangé. 🙁 Merci pour l'astuce, si! 🙂
OriginalL'auteur Magnus Johansson
Trace ensemble="true" (<%@ Page Trace="true"...) dans votre page et vous obtiendrez un grand nombre d'informations utiles au bas de la page lorsqu'il est chargé dans le navigateur. Vous saurez exactement comment beaucoup de temps est nécessaire pour traiter la demande sur le serveur. Si le temps est suffisamment faible, le problème pourrait être dans les paramètres IIS. De les comparer à celles de votre environnement de dev.
ce qui est dans le chargement de la page de l'événement alors??
Toute la logique qui s'exécute plus rapidement sur ma machine de développement 😛
OriginalL'auteur lingvomir
Est votre serveur SQL server sur un autre serveur sur la production, mais en local sur le développement?
OriginalL'auteur Mike McClelland
À la lecture de toutes les suggestions, et semble-t-il comme rien ne se de travail, de commencer à prendre le code de votre site, peu à peu, et voir comment cela affecte le temps. Retirez environ 10 lignes de code ou HTML à un moment, et voir si il y a une énorme différence.
Sinon, il a probablement à voir avec IIS, et désolé, je ne suis pas IIS gourou.
OriginalL'auteur Martin
Massive viewstate provoquant délai de transmission?
OriginalL'auteur Stephen Newman
Est-ce le seul site que vous avez sur le serveur? 16 le Sgb est assez bonne mémoire, mais si il y a beaucoup de sites web populaires sur le même serveur qu'ils pouvaient manger de ressources et de temps PROCESSEUR.
D'autres que je ne peux pas penser à une raison pourquoi votre site est lent sur la production que dans le développement.
Avez-vous de vérifier les index? Ils sont tous là, sur le serveur?
OriginalL'auteur Cyril Gupta
Vous avez besoin afin de réduire les variables.
Essayez d'éliminer toutes les différences entre les deux environnements, puis apportez les modifications une par une jusqu'à ce que vous comprendre ce que c'est.
Assurez-vous que le web.la config est la même dans les deux environnements.
Assurez-vous que les deux environnements pointer vers le même serveur de base de données sur une 3ème zone.
Assurez-vous que la même version de IIS est dans les deux environnements.
Assurez-vous que IIS est configuré de la même dans les deux environnements.
Exécuter les mêmes données de test sur les deux environnements.
etc...
OriginalL'auteur Greg
Après cogner ma tête contre le mur pendant une longue période concernant la différence de performances de ma machine de développement et de la production de la machine, j'ai finalement cédé à la sensation que j'ai eu au fond que le processeur fait de l'importance beaucoup plus que vous ne le pensez.
J'ai changé de un AMD solution basée sur une solution à base de processeur Intel (Xeon!), gagner de .3GHz et des disques plus rapides.
J'ai aussi gagné un gain de performances, au lieu de x3 aussi lente que ma machine de développement, il est maintenant à quelque chose comme x0.75 lente évidemment pas encore de la la vitesse de l'éclair que ma machine de développement est capable de mais ça se rapproche de plus.
Pendant le débogage de cette nouvelle, j'ai remarqué que la plupart de la performance de porcs (qui n'est pas une surprise vraiment) vient de LINQ to SQL avoir à compiler des requêtes, ce qui me semble étrange, c'est que une fois que j'ai essayé de précompilation une requête LINQ et en exécutant la même chose sur mes deux machines, la machine de développement s'est avéré être plus rapide.
Curieux de savoir ce que votre utilisation du processeur sur le serveur de production avant et après le processeur de commutateur?
OriginalL'auteur cralexns