2011-01-05 4 views
1

Grüße!ASP.NET Speicherauslastung in II ist FAR größer als in DevEnv. Ist das normal?

Ich habe eine ASP.NET-Anwendung, die Daten von einer Handvoll externer Seiten scrapt, analysiert die relevanten Bits und zeigt sie in einer Tabelle an. Die insgesamt abgerufenen Daten sind 3-4 MB und die resultierende Seite ist ungefähr 1 MB. Ich verwende synchrone WebRequest GetResponse für den Abruf, aber das gleiche Problem existierte mit einem asynchronen BeginGetResponse/EndGetResponse-Prozess. Es gibt keinen Datenbankzugriff, keinen Sitzungsspeicher, keine Zwischenspeicherung, sondern eine speicherinterne Liste von etwa 100 Objekten (insgesamt 1 MB Daten), plus eine gute Menge AJAX (AjaxControlToolkit). Dieses Problem tritt bei der allerersten Ausführung der App auf, selbst wenn ich IIS neu gestartet habe.

Das Problem:

Wenn ich die App auf meinem dev Computer ausgeführt werden, begeht die maximale Ladung beträgt ca. 1,5 GB. Der größte Benutzer, gemessen an der VM-Größe des Task-Managers, ist WebDev.WebServer.exe (600 MB). Die App läuft perfekt.

Wenn ich es auf meinem Rent-a-Server (IIS 7,5, 1 GB RAM) ausführen, ist die maximale Commit-Gebühr über 3,8 GB. Der größte Benutzer ist w3wp.exe mit 2,7 GB. IIS wird angehalten und spuckt eine zeitgesteuerte Fehlerseite aus. Angesichts meines begrenzten Serverbudgets und der Hoffnung, mehrere gleichzeitige Benutzer zu haben, bin ich irgendwie in Panik.

Ist das normal? Wenn ich den Server-RAM auf 4 GB stoße, reicht das? Benötigen mehrere Benutzer noch mehr Speicher? Könnte der Schuldige AJAX oder die Liste der Objekte sein?

Vielen Dank für Ihre Informationen.

Antwort

1

Nun, nach einiger harter Arbeit, ich der Täter identifiziert haben: unsere alten Widersacher der Endlosschleife. Wenn die Entwicklungsumgebung eine Ausnahme ausgelöst hätte, hätte ich natürlich das Problem aufgegriffen und ausgeschnitten - aber das tat es nicht.

Ich würde sagen, dass die hier gelernte Lektion zu verstehen ist, dass verschiedene Versionen von IIS und DevEnv auf Fehler unterschiedlich reagieren und dass wir die App in der gleichen Konfiguration testen müssen, in der sie bereitgestellt wird.

Vielen Dank für Ihr Feedback.

0

Haben Sie versucht, dies in Ihrer Entwicklungsumgebung unter IIS 7.5 auszuführen?
Stellen Sie sicher, debug = „false“, nicht „true“ in Ihrer web.config

+0

SEHR INTERESSANT ... Ich habe IIS 5.1 (die Version, die mit XP kommt) eingerichtet und die App über mein Netzwerk ausgeführt. Die maximale Commit-Gebühr auf dem 5.1-Server betrug 1,3 GB - noch weniger als beim WebDev.WebServer. Bei nachfolgenden Läufen ist die Speicherbelegung tatsächlich gesunken. Ist IIS 7.5 so viel Speicher? – Tom

+0

Sie benötigen eine Staging-Umgebung, die mit Ihrer Implementierungsumgebung identisch ist. Testen auf XP (IIS 5) ist absolut nichts wie Testen auf IIS 7 oder IIS 6. –

+0

Das macht Sinn. Da meine Site noch nicht live ist, verwende ich den realen Server als Staging-Umgebung.Würde es einen Unterschied machen, wenn ich hier auf meiner Entwicklungsseite eine identische Umgebung einrichten würde? Ich würde denken, dass es die gleichen Ergebnisse haben würde ... – Tom

1

Ich glaube, Sie brauchen einige Debugging-Tools zu graben und einen Arbeitsprozess Abwerfen des Produktionsserver zu erfassen, werden Sie nicht in der Lage sein, um dieses Problem mit nur PerfMon und Task Manager richtig zu diagnostizieren.

posted ich diese Antwort auf Stack-Überlauf, die vor einiger Zeit sollten Sie den Einstieg:

CLR out Of Memory Exceptions