J'ai un site Web sur mon serveur, et mon processus de travail IIS utilise 4 Go de RAM de manière cohérente. Que devrais-je vérifier?IIS Worker Processus utilisant beaucoup de mémoire?
c:\windows\system32\inetsrv\w3wp.exe
J'ai un site Web sur mon serveur, et mon processus de travail IIS utilise 4 Go de RAM de manière cohérente. Que devrais-je vérifier?IIS Worker Processus utilisant beaucoup de mémoire?
c:\windows\system32\inetsrv\w3wp.exe
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
vérifier la section sur les goulots d'étranglement de mémoire de dépannage dans Tuning .NET Application Performance
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".
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.
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.
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