2008-10-29 8 views

Répondre

13

Je voudrais vérifier la section de réglage CLR dans le Gulzar document mentionné.

Comme les autres affiches souligné, tout objet qui implémente IDispose devrait avoir Dispose() invoqua quand il est fini avec, en utilisant de préférence la construction using.

Révolutionnez perfmon.exe et ajouter ces compteurs:

  • Process \ Private Bytes
  • Mémoire CLR .NET # Octets dans tous les monceaux
  • Process \ Working Set
  • Mémoire CLR .NET \ Grand objet taille de tas

Une augmentation des octets privés tout en le nombre d'octets dans tous les compteurs Heaps reste le même indique non consommé consommation de mémoire.

Une augmentation deux compteurs indique la gestion de la consommation mémoire

1

Si vous avez accès au code source, vous pouvez vouloir vérifier que les objets qui mettent en œuvre IDisposable sont référencées dans using déclarations ou correctement éliminés quand vous avez fini avec eux.

Using est une construction C#, mais l'idée de base est que vous libérez des ressources lorsque vous avez terminé.

Une autre chose à vérifier est de grands objets placés dans l'état de session ou dans le cache "en cours".

1

Plus de détails seraient certainement aider. Combien d'applications s'exécutent dans le pool d'applications? Existe-t-il des applications ASP.NET dans le pool?

Si vous exécutez ASP.NET, examinez bien ce que vous stockez dans les variables de session et de cache. Utilisez PerfMon pour vérifier le nombre de collections de générations 0, 1 et 2. Méfiez-vous du stockage des éléments de l'interface utilisateur dans l'état ou le cache de la session, car cela empêchera la collecte de l'instance de page entière et de tous les enfants de l'instance de page. Enfin, vérifiez si vous faites beaucoup de concaténation de chaînes. Cela peut provoquer beaucoup d'instanciations d'objet puisque les chaînes .NET sont immuables. Cherchez à utiliser plutôt StringBuilder.

+0

Oui, mais si les chaînes sont sur le tas d'objets volumineux, elles ne seront collectées que lors des collectes Gen 2 si je ne me trompe pas. – Maxam

0

Comme d'autres personnes ont noté une cause commune de ce problème est la fuite des ressources, il y a également un problème connu avec le serveur win2k3 et IIS6 KB916984

+0

Je pense que c'était le problème ... mais j'ai SP2 déjà. :( – Jason

1

Créez un mini-dump du processus w3wp et utilisez WinDbg pour voir quels objets sont en mémoire. C'est ce que fait l'équipe de support IIS chez Microsoft chaque fois qu'ils ont des questions comme celle-ci.

Questions connexes