Utilisation élevée de la mémoire avec w3wp pool d'applications IIS 7
J'ai un site web de l'application en cours d'exécution dans son propre pool d'applications IIS 7.0. L'application est un ASP.NET MVC 3 site web.
J'ai remarqué l'utilisation de la mémoire pour cette applications correspondant w3wp de travail IIS service est assez élevé ( 800 MO, avec une certaine fluctuation ).
Je suis en train d'essayer de diagnostiquer le problème et ont essayé les suivantes:
J'ai désactivé la sortie de la page mise en cache pour le site web des services internet (IIS), puis recyclé le pool d'applications. Cela provoque le processus w3wp à redémarrer. L'utilisation de la mémoire pour ce processus, puis se glisse lentement jusqu'à environ 800 MO, il faut environ 30 secondes pour le faire. Il n'y a pas de page de demandes traitées en ce moment. Lorsque je redémarre le site web de IIS la taille de la mémoire du processus ne change pas.
J'ai essayé de lancer une copie de débogage de l'application de VS 2010, il n'y a pas de problèmes avec l'utilisation de la mémoire.
Quelques idées/questions sont les suivantes:
Ce problème est-il lié aux sites web du code? - Étant donné que la mémoire de roquettes avant qu'une page demandes ont été envoyés/manipulé, je suppose que ce n'est PAS un problème de code?
L'application construite en MVC a pas de manipulation de la mise en cache écrit.
Le site web utilise en temps réel l'affichage des données, il utilise des requêtes ajax périodiquement, et est généralement de gauche "ouvrir" pour de longues périodes de temps.
Pourquoi l'utilisation de la mémoire fusée après l'application est recyclé et pas de demandes de l'utilisateur sont envoyées? Est-ce parce que c'est le chargement de vieux cache de l'information dans la mémoire à partir du disque?
L'application ne plante PAS, je suis juste inquiet au sujet de l'utilisation de la mémoire, il n'est pas que les grandes d'un site web...
Toutes les idées/les aider à aller au fond de ce problème serait appréciée.
Vous devez vous connecter pour publier un commentaire.
Je viens de regarder mon serveur et mon piscines d'utiliser 900-1 000 MO taille Virtuelle de la Mémoire et de 380 MO jeu de Travail. Mes sites fonctionnent parfaitement avec problème depuis quelques années maintenant, et j'ai vérifier eux de tous les côtés. Ma piscine ne jamais recycler et le serveur s'exécute jusqu'à la prochaine mise à jour continuesly avec 40% stable mémoire physique libre.
Si votre mémoire n'est pas continue de croître, de cette mémoire est le code et les données que vous définissez comme statique, const, la chaîne et le possible de cache, à l'intérieur de votre application.
Vous pouvez utiliser process explorer pour voir le travail et la taille virtuelle de la mémoire.
Vous pouvez aussi penser à l'exécution d'un profil à l'encontre de votre code pour voir si vous avez des "fuite de mémoire" ou d'un autre problème. Trouver un google: https://www.google.com/search?hl=en&q=asp.net+mémoire+profiler.
La meilleure chose à faire si vous pouvez vous permettre d'utiliser un débogueur est d'installer le Outils De Débogage De Windows et d'utiliser quelque chose comme WinDbg et SOS.dll pour comprendre exactement ce qui est en mémoire.
une fois que vous avez installé les outils vous pouvez alors:
À ce point, vous devriez être en mesure de voir tous les types triés par plus de la consommation de mémoire de sorte que vous pouvez commencer avec ceux du bas. (Je recommande d'exclure des Chaînes, et de l'Objet dans la mesure où ceux-ci sont généralement un effet et non la cause).
Utiliser "!dumpheap de type type-là" pour rechercher les instances et à utiliser !gcroot pour ceux à comprendre pourquoi ils sont dans la mémoire, peut-être en raison d'un champ statique, ou un gestionnaire d'événement de fuite, WCF canaux ne sont pas éliminés, ou des choses comme ça qui sont des sources communes.
Il n'a probablement pas s'appliquer ici, mais pensé que je pourrais le jeter pour faire bonne mesure. Récemment, j'ai eu un problème là où ma mémoire serait aller à droite et max quand il pouvait vraiment de nettoyer jusqu'à 80%. Problème: Il croyait sur 2 plus de show qu'il fait le GC a été assez paresseux. (C'était dû à une VM ware bug de windows sur les rapports de 8 go, mais physiquement il n'y avait qu'6.4). Voir blog.http://www.worthalook.net/2014/01/give-back-memory/
Quelque chose qui pourrait vous aider: si vous "réécrire" (ouvrir/enregistrer) sur le web.config , alors votre demande de réinitialisation, vous devez surveiller l'utilisation de la mémoire à partir de ce point. Si elle continue à s'agrandir au cours de l'utilisation, cela pourrait signifier la fuite de mémoire ou non de la mise en cache. Vous pourriez être en mesure d'identifier les actions effectuées sur votre site mènent à la mémoire d'augmenter. Pendant une longue période, l'utilisation de la mémoire d'une application doit être stable.