ASP.NET High CPU bringt Server auf die Knie


8

Ok, unser neuer Build hat 100% CPU-Spitzen auf jedem Server in zufälligen Intervallen. Für lange Zeiträume reagiert die Site nicht mehr - dies ist zu Spitzenzeiten der Fall, wenn sich Personen in verschiedenen Ländern auf der Site anmelden usw.

Wir haben uns Perfmom, Speicherprofiler, CLR-Profiler, SQL-Profiler, Red Gate Ameisen-Profiler angesehen und Lasttests in UAT versucht - können das Problem jedoch nicht einmal reproduzieren. Dies könnte bedeuten, dass nur Tausende von Benutzern, die die Live-Site besuchen, dies verursachen.

Ein Muster, das wir bemerkt haben, war, dass der neue Code - der kaputte Build - tatsächlich deutlich weniger Threads verwendet.

Wir verwenden Frühling auch für IOC - hat dies einen guten Ruf im Bett?

Um die Sache noch schlimmer zu machen, können wir aufgrund der geschäftlichen Auswirkungen keine Bereitstellung für das Leben bereitstellen. Daher können wir das Problem nicht auf eine Teilmenge der neuen Funktionen eingrenzen, die wir hinzugefügt haben.

Wir sind wirklich zerstört - hat jemand Kampfnarben, die uns ein paar Leben retten könnten?


Was melden die Temperatursensoren? Ich frage mich, ob Ihr Netzteil nicht mithalten kann. (Keine Ahnung, wie man das überprüft.)
Sarnold

2
Wenn Sie sagen, dass der Server heruntergefahren wird, können Sie weitere Details hinzufügen. Ist es BSOD? Meinen Sie damit einen Neustart oder einen Neustart der App-Domain?

Es gibt überhaupt keine Möglichkeit, dass ein "100% CPU- Spike " den Server "herunterfährt". Es müsste ziemlich lange auf 100% fixiert sein, verbunden mit Problemen mit der Wärmeableitung.
Andrew Barber

1
Was macht es?? Welcher Prozess nutzt die CPU in der Spitze? Dies ist die wichtigste Frage.
Aliostad

Meine Frage wurde aktualisiert - ist das besser? Vielen Dank für die -1 :)

Antworten:


3

Ich schlage vor, Speicherabbilder zu erstellen und diese in WinDdg mit Sos zu analysieren. Ich habe einige Probleme in unserer Produktion behoben, die ich ohne WinDbg wahrscheinlich nicht diagnostizieren könnte.

Tess Fernandez hat einen großartigen Blog, in dem Sie lernen können, wie man Speicherabbilder analysiert.


Dieser Blog ist eine ausgezeichnete Ressource und wir haben ihn genutzt. Unser Problem ist, dass wir das Problem nicht erneut erstellen und die Dumps abrufen können.

1
Um das Problem erneut zu beheben, können Sie Ihr Testsystem mit jmeter ( jmeter.apache.org ) und ab ( httpd.apache.org/docs/2.0/programs/ab.html ) hämmern . Mit diesen Multicores, einem schnellen LAN und einigen Kollegen sollten Sie in der Lage sein, den Server ausreichend zu belasten.
Roman

1

Dies wird normalerweise durch eine große, langlebige Objektbereinigung im GC verursacht ( Stackoverflow hatte dieses Problem, siehe Link ). Speichern Sie viele Objektsammlungen im Cache oder in der Sitzung?

Angriff durch GC

Ich empfehle Ihnen auch, einen neuen Server in der Produktion zum Testen zu erstellen und zu konfigurieren. Wenn Sie zufällige Verrücktheit haben und nicht wissen, warum und nicht reproduzieren können, würde ich den Finger auf Hardware oder Konfiguration richten, nicht auf Code.


Wir können keinen neuen Code live schalten, da er Nachrichtenfunktionen hinzufügt. Als der Code live war, war die GC-Nutzung dieselbe - auch für Generation 2. Vielen Dank - haben Sie weitere Vorschläge?

Es ist nicht unmöglich, aber die Hardware und Konfiguration sind fast identisch mit der letzten Bereitstellung, auf die wir zurückgegriffen haben und die erfolgreich funktioniert.

1

Ist dies ein virtueller Server mit gemeinsam genutzten Ressourcen oder ein physischer Server? Wenn es das erstere ist, könnten Sie vielleicht versuchen, Ressourcen für diesen Server bereitzustellen. Viel Glück...


0

Versuchen Sie es mit einem cache serverals Frontend Apache Traffic Server (ATS).

Dies wird das Problem zwar nicht lösen, es kann jedoch hilfreich sein, es zu identifizieren, da Sie gleichzeitig die potenziell schädliche Last aus dem Backend entfernen (um festzustellen, ob das Frontend ebenfalls Probleme aufweist) und die Dinge im Backend weniger heiß werden lassen leichter zu erkennen, was los ist.


0

Der Versuch, den Fehler ohne die Daten zu erraten, ist sinnlos. Ja, jemand im Stackoverflow oder in Ihrem Engineering-Team hat möglicherweise Glück, aber das ist nur schlechtes Engineering, und Sie können nicht planen, wie lange Sie brauchen, um jede Vermutung zu versuchen, und ob Sie das Problem überhaupt finden würden.

  1. Sie müssen das Problem erneut melden . Jmeter ist aufgrund seiner Breite ein guter Anfang, aber wir können das richtige Werkzeug nicht empfehlen, ohne unsere Architektur zu kennen.
  2. Die Protokollierung speziell in Ihrer Anwendungsschicht ist ein Muss. Sie können IIS-Traces für eine langsame Leistung aktivieren, aber die Muppets bei Microsoft haben es geschafft, sodass Sie nicht den gesamten Pipeline-Fluss erfassen können, wenn dieser langsam ist. Wenn es so schwierig ist, repro, würden Sie wirklich , wie einige Protokolle zu Hilfe verengen Sie nach unten , wo das Problem ist. (wie oh, es ist immer dann, wenn wir diesen gespeicherten Prozess nennen).

Die 100% CPU ist ein wenig verdächtig in dem Sinne, dass es unwahrscheinlich ist, dass es sich um E / A handelt (vorausgesetzt, die Datenbank ist eine andere Box, sollte eine langsame Datenbank keine 100% CPU auf den Webservern verursachen). Sie müssen näher zu Hause schauen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.