2008-08-13 7 views
4

Wir führen eine benutzerdefinierte Anwendung in unserem Intranet, und wir haben ein Problem nach der Aktualisierung in letzter Zeit festgestellt, wo IIS mit 100% CPU-Auslastung hängt, ein Reset erforderlich.Load-bezogene Abstürze in Nicht-Produktionsumgebungen replizieren

Anstatt die Benutzer zu informieren, haben wir auf die vorherige Version zurückgesetzt, während wir eine Lösung ermitteln. Der erste Schritt besteht darin, das Problem zu reproduzieren - aber wir können es nicht.

Hier einige Hintergrundinformationen:

Prod hat einen einzigen virtualisierten (vmware) Web-Server mit zwei CPUs und 2 GB RAM. Der Datenbankserver hat 4 GB und 2 CPUs. Es ist auch auf VMWare, aber separate physische Hardware.

Während der normalen Verwendung läuft die Anwendung ordnungsgemäß. Der Prozess w3wp.exe verwendet normalerweise zwischen 5-20% CPU und ca. 200MB RAM. CPU und RAM schwanken bei normaler Verwendung leicht, aber nichts Ungewöhnliches.

Wenn jedoch Probleme auftreten, steigt der RAM drastisch an und die CPU klemmt bei 98% (oder so viel wie möglich). Die Website reagiert nicht mehr und erfordert einen IIS-Neustart. Durch das Zurücksetzen des App-Pools in dieser Situation wird kein vollständiger IIS-Neustart benötigt.

Es passiert nicht während der Nacht (keine Verwendung). Es passiert mehr, wenn die Website unter Last ist, aber es ist auch außerhalb von Spitzenzeiten passiert.

Der erste Schritt zur Lösung dieses Problems ist die Reproduktion. Um die Last zu simulieren, verwenden wir JMeter, um die Verwendung zu simulieren. Unser Ladeskript basiert auf der tatsächlichen Nutzung um den Zeitpunkt des Absturzes herum. Mit JMeter können wir die Nutzung ziemlich hoch (2-3 Mal höher als die Last während des Absturzes) erhöhen, aber die Seite verhält sich gut. Die CPU ist hoch und die Seite wird träge, aber die Speichernutzung ist vernünftig und nichts hängt.

Hat jemand irgendwelche Tipps, wie man ein Problem wie dieses in einer Nicht-Produktionsumgebung reproduzieren kann? Wir möchten den Fehler wirklich reproduzieren, eine Lösung bestimmen und dann erneut testen, um sicherzustellen, dass wir den Fehler behoben haben. Während des Prozesses haben wir eine Reihe von kleinen Dingen gefunden, die wir verbessert haben, die das Problem lösen könnten, aber ich würde mich viel sicherer fühlen, wenn wir das Problem reproduzieren und die verbesserte Version testen könnten.

Alle Werkzeuge, Techniken oder Theorien sehr geschätzt!

+0

Ich nehme an, Sie haben Protokollierungsfunktionen von IIS und/oder Ihrer Anwendung? Wenn die Probleme beginnen, was genau bewirkt das? Wie ist das anders als bei der Belastungsprüfung? –

+0

Ich habe das gleiche Problem, werfen Sie einen Blick auf Ihre vmware Leistungsprotokolle, schauen Sie sich die Erinnerung über einen Monat oder zwei, für uns alle 8-10 Tage das passiert, als wir weniger RAM hatten, war es alle sechs Tage. Es sieht so aus, als ob ein Speicherleck vorliegt. Wir hatten genau die gleiche Website, die auf einem echten physischen Server ohne Probleme lief, es scheint ein Problem mit IIS und VMware zu sein. Um Ihre Frage zu beantworten, versuchen Sie, Ihr Ladewerkzeug für (Wochen) auszuführen und die Ablaufverfolgung auf dem Testserver einzurichten. Wenn Sie eine Lösung finden, bitte posten, ich habe nirgends hingekommen. – Mike

Antwort

1

Sie finden einige Informationen zur Fehlerbehebung bei dieser Art von Problem unter this blog entry. Ihr Blog ist im Allgemeinen eine gute Debugging-Ressource.

0

Ist Ihr Test env das gleiche wie live? d. H. 2 separate VM-Instanzen auf 2 physischen Servern - mit der Netzwerkverbindung und Account-Typen?

Gibt es weitere Instanzen in der Datenbank?

Gibt es andere Webanwendungen in IIS?

Ist die .Net-Konfiguration richtig?

Ist die App Pool-Konfiguration für Dienstkonten richtig? Try look at this - MS Article on II6 Optmising for Performance

Viele Tricks.