Ich habe eine Website auf meinem Server, und mein IIS-Arbeitsprozess verwendet konsequent 4 GB RAM. Was sollte ich überprüfen?IIS-Arbeitsprozess mit viel Speicher?
c:\windows\system32\inetsrv\w3wp.exe
Ich habe eine Website auf meinem Server, und mein IIS-Arbeitsprozess verwendet konsequent 4 GB RAM. Was sollte ich überprüfen?IIS-Arbeitsprozess mit viel Speicher?
c:\windows\system32\inetsrv\w3wp.exe
Ich würde die CLR-Tuning-Abschnitt in der document Gulzar erwähnt.
Wie die anderen Poster darauf hingewiesen, sollte jedes Objekt, das IDispose
implementiert, Dispose()
aufgerufen haben, wenn es fertig ist, vorzugsweise mit dem using
Konstrukt.
Feuer up perfmon.exe
und fügen Sie diese Zähler:
- Prozess \ Private Bytes
- .NET CLR-Speicher # Bytes in allen Heaps
- Process \ Working Set
- .NET CLR-Speicher \ Large Object Heap Größe
Eine Erhöhung der privaten Bytes während Die Anzahl der Bytes in allen Heaps-Counter bleibt die gleiche zeigt nicht verwalteten Speicherverbrauch.
Eine Erhöhung der beiden Zähler Speicher Verbrauch
Überprüfung der Abschnitt zur Fehlerbehebung Speicherengpässe in Tuning .NET Application Performance
Wenn Sie den Zugriff auf den Quellcode haben, können Sie überprüfen möchten, dass alle Objekte, die IDisposable implementieren innerhalb using
Aussagen Bezug genommen wird, oder ordnungsgemäß entsorgt werden wenn du mit ihnen fertig bist.
Using
ist ein C# -Konstrukt, aber die Grundidee ist, dass Sie Ressourcen freigeben, wenn Sie fertig sind.
Eine weitere Sache, die überprüft werden soll, sind große Objekte, die in den Sitzungszustand oder Cache des Prozesses gebracht werden.
Mehr Details würde definitiv helfen. Wie viele Anwendungen werden innerhalb des Anwendungspools ausgeführt? Gibt es ASP.NET-Anwendungen im Pool?
Wenn Sie ASP.NET ausführen, sehen Sie sich gut an, was Sie in der Sitzung speichern und Variablen zwischenspeichern. Verwenden Sie PerfMon, um zu überprüfen, wie viele Sammlungen der Generation 0, 1 und 2 auftreten. Seien Sie vorsichtig beim Speichern von Benutzeroberflächenelementen im Sitzungsstatus oder im Cache, da dies verhindert, dass die gesamte Seiteninstanz und alle untergeordneten Instanzen der Seiteninstanz ebenfalls erfasst werden. Überprüfen Sie abschließend, ob Sie viele String-Verkettungen durchführen. Dies kann viele Objekt-Instanziierungen verursachen, da .NET-Strings unveränderbar sind. Schauen Sie sich stattdessen den StringBuilder an.
Erstellen Sie einen Minidump des w3wp-Prozesses und verwenden Sie WinDbg, um zu sehen, welche Objekte sich im Speicher befinden. Dies ist, was das IIS-Support-Team bei Microsoft tut, wenn sie Fragen wie diese erhalten.
Ja, aber wenn die Zeichenfolgen auf dem großen Objekt-Heap sind, werden sie nur in Gen 2-Sammlungen gesammelt, wenn ich mich nicht irre. – Maxam