2008-12-19 6 views
7

Wir hosten eine ziemlich große (selbst geschrieben) ASP.NET-Website für unsere Kunden. Es besteht aus einem Web-Service, einer Website und einer Image-Serving-Website, alle drei in einem eigenen virtuellen Verzeichnis. Die drei virtuellen Verzeichnisse sind in einem Anwendungspool zusammengefasst. Der Pool verfügt über Speicherlimits (maximaler virtueller Speicher und maximal belegter Arbeitsspeicher), die auf 500 Megabyte festgelegt sind.Worker Prozess recycelt, weil es seine virtuelle Speichergrenze erreicht

Der Anwendungspool erleidet jedoch viele Wiederverwendungen, selbst wenn jeweils nur ein Benutzer vorhanden ist. Die eventlog Nachricht sagt:

Ein Arbeitsprozess mit Prozess-ID von ‚xxxx‘ für Anwendungspool ‚xxxx‘ eine Wiederverwendung angefordert hat, weil sie ihre virtuelle Speichergrenze erreicht.

Die Überwachung des Arbeitsprozesses mit Process Explorer zeigt jedoch nichts, was diese Meldung unterstützt. Welche Zähler sollte ich beobachten, um den Speicher zu beobachten, der tatsächlich durch beide Einstellungen begrenzt ist?

Update 1

den Prozess im Task-Manager Beobachten zeigt eine ‚Speichernutzung‘ und ‚vm Größe‘ von etwa 100 MB, noch der Prozess mit der obigen Meldung zurückgeführt wird. 5 GB physischer Speicher auf dem Server verfügbar ...

Update 2

Obwohl die Website ziemlich groß ist, ist das Problem in einem kleinen Teil der Anwendung konzentriert. Es führt eine Abfrage (unter Verwendung von Oracle) aus und bindet die Ergebnisse an eine Gridview- und Repeater-Websteuerung. Die Ergebnisse bestehen aus einer kurzen Beschreibung und einem Icon (geladen über die Image-Serving-Website). Wenn ich 10 Suchaktionen hintereinander ausgeführt werden, die jeweils zu geben 9 Ergebnisse zeigt der Arbeitsprozess von Speicherauslastung und vm Größe von ca. 100 MB und rezykliert ...

Update 3 Schalten der Verwendung des Bildes dienen Website führt nicht zu besseren Ergebnissen. Ich denke also, es ist fair zu sagen, dass das Problem etwas anderes ist.

Antwort

0

Versuchen Sie es mit dem Windows Task-Manager. Wechseln Sie auf der Registerkarte Prozesse zum Menü Ansicht und wählen Sie Spalten auswählen. Wählen Sie die Spalte Größe des virtuellen Speichers aus, und beobachten Sie dann den Wert für den ASP.net-Workerprozess.

1

Wenn Ihre "Image-Serving" -Website irgendeine Inline-Bildverarbeitung/-generierung ausführt, können Sie Speicher schnell verschlingen, indem Sie Dispose() nicht auf allen verfügbaren Ressourcen aufrufen - vor allem denen, die nativ umbrechen Funktionalität ...

Es ist keine direkte Antwort auf Ihre Frage, aber es könnte helfen, in das zugrundeliegende Problem zu schauen, das den grassierenden Speichergebrauch verursacht.

+0

Danke für den Hinweis, aber ich habe schon in dem aussehen. –

+0

Das muss eine ziemlich schwere Anwendung sein, wenn es mit einem Benutzer foobars! –

0

hatte ich das gleiche Problem mit einer virtuellen Maschine, wenn wir Speicher aufgerüstet Größe von 4 Gb bis 8 Gb (ironisch).Ich habe diesen Blog gefunden, der erklärt, dass wir "private memory limit" aber nicht "virtual memory limit" mit 64bit System verwenden können, denn: "Wenn Sie auf einer 64bit Plattform sind (und ich bin), reservieren ASP.NET App aggressiv virtuellen Speicher" .

http://blog.walteralmeida.com/2011/07/iis7-private-memory-limit-versus-virtual-memory-limit.html