Suchen Sie ein Speicherleck in ASP.NET Web App

8

Ich hosse 7 Websites auf einem einzigen Produktionsserver (virtuell) mit 2,53 Ghz (2 CPU) und 8 GB RAM auf WIN SERVER 2008 R2 Enterprise 64 Bit.

Der Webserver ist IIS 7 und alle Websites sind mit dem .NET Framework 4.0-Anwendungspool.

Meine aktuelle Speicherbelegung beträgt etwa 4,16 GB von 8 GB und w3wp.exe ist der meiste Prozess, der den größten Teil der Speicherbelegung verbraucht (etwa 1,6 GB zu diesem Zeitpunkt), gefolgt von sqlservr.exe mit (1,5 GB) Nutzung / p>

Was ich tun möchte, ist zu wissen, welche Website von 7 am meisten Speicher verbraucht, so dass ich einen Blick darauf werfen konnte.

Ich habe Process Explorer und Resource Monitor ausprobiert, aber es konnte nur zeigen, wie viel rem von w3wp.exe gemacht wurde, aber nicht die Benutzung einzelner Webseiten.

Gibt es einen Weg, wo ich den Speicher-Hogger lokalisieren könnte?

    
Ye Myat Aung 01.10.2012, 08:34
quelle

3 Antworten

20

Sie können einen Speicherabzug mit dem Debug Diag -Tool von Microsoft machen.

Grundlegender Prozess ist:

  • Starten Sie DebugDiag
  • Abbrechen Assistent
  • Klicken Sie auf die Registerkarte "Prozesse"
  • Wählen Sie w3wp
  • Klicken Sie mit der rechten Maustaste und wählen Sie "Vollständigen Speicherauszug erstellen"
  • Snigger leise zu dir selbst, weil du gesagt hast "dump"
  • Sobald der Speicherauszug fertig ist ( erneut kiten ), klicken Sie auf die Registerkarte "Erweiterte Analyse"
  • Verwenden Sie die 2 Memory Pressure Analyzer-Skripts, um zu sehen, ob Sie sehen können, welche Objekte viel Speicher belegen.

Ich würde Ihnen empfehlen, dies in Kombination mit Uri Mays Antwort zu tun, da Sie ansonsten wahrscheinlich viel Zeit verschwenden werden.

    
RB. 01.10.2012 08:38
quelle
2

Sie können jede Website so konfigurieren, dass sie verschiedene App-Pools verwendet. Auf diese Weise haben Sie einen w3wp.exe -Prozess für jede Website der 7 Websites, die Sie hosten. Danach können Sie das Tool im folgenden diesem Link finden heraus, welche der Websites das Leck verursacht, indem Sie die PID der w3wp.exe mit der größten Speicherbelegung verfolgen.

    
Uri May 01.10.2012 08:38
quelle
0

Im Windows-Task-Manager können Sie sehen, welcher App-Pool die einzelnen w3wp.exe ausführt, indem Sie einfach die Spalte "user" anzeigen. Dies liegt daran, dass jeder App-Pool normalerweise mit einem eigenen Benutzer ausgeführt wird. Sie haben es etwas schwieriger gemacht, dies in Windows 2012 Server zu sehen - Sie müssen zuerst auf die Registerkarte "Details" klicken.

    
mike nelson 05.03.2016 09:09
quelle
Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ tag123rubyonrails ___ Ruby on Rails ist ein Open-Source-Full-Stack-Webanwendungs-Framework, das in Ruby geschrieben ist. Es folgt dem populären MVC-Framework-Modell und ist bekannt für seinen "convention over configuration" -Ansatz für die Anwendungsentwicklung. ___ tag123ruby ___ Ruby ist eine multi-plattform Open-Source, dynamische objektorientierte interpretierte Sprache, erstellt von Yukihiro Matsumoto (Matz) im Jahr 1995. Die [Ruby] -Tag ist für Fragen im Zusammenhang mit der Ruby-Sprache, einschließlich seiner Syntax und seiner Bibliotheken . Fragen speziell zum Ruby-on-Rails-Framework sollten mit [ruby-on-rails], nicht [ruby] getaggt werden. Verwenden Sie dies nicht, um Ruby in der japanischen Sprache zu markieren. ___ tag123class ___ Eine Vorlage zum Erstellen neuer Objekte, die die allgemeinen Zustände und Verhaltensweisen beschreibt. NICHT MIT CSS-KLASSEN VERWECHSELN. Verwenden Sie stattdessen [css]. ___ tag123ifstatement ___ Eine "if" -Anweisung ist eine Kontrollstruktur in vielen Programmiersprachen, die den Ausführungsfluss abhängig von einer Bedingung ändert. ___ answer12698994 ___
%Vor%     
___ tag123linkto ___ link_to ist die Methode in Ruby on Rails, mit der Link-Tags in Ansichten erstellt werden. ___ qstntxt ___

Ich möchte nur dann eine Klasse zu einem link_to hinzufügen, wenn eine Aussage wahr ist.

%Vor%

Das Problem, dass die IF-Anweisung die gesamte Zeile und nicht nur den : class -Teil betrifft.

Ich weiß, ich kann es mit IF ELSE erledigen, aber ist es möglich, es in 1 Zeile zu tun?

    
___ answer12698983 ___

Nun, du könntest das in einem Helfer abstrahieren:

%Vor%

Dann können Sie aus Ihrer Sicht einfach %code% machen.

Aktualisieren : oder kompakter:

%Vor%     
___