"Peaky" CPU-Auslastung auf Domänencontrollern

25

Wir haben zwei Windows Server 2008 SP2-Domänencontroller (leider nicht 2008 R2) in einer kleinen 150-Clientdomäne, die eine sehr hohe CPU-Auslastung aufweisen. Die Domänencontroller weisen beide dasselbe Verhalten auf und werden auf vSphere 5.5.0, 1331820 gehostet. Alle zwei oder drei Sekunden springt die CPU-Auslastung auf 80-100% und sinkt dann schnell, bleibt für ein oder zwei Sekunden niedrig und springt dann auf nochmal.

Leistung des DC3-Task-Managers


Ein Blick auf die historischen Leistungsdaten der virtuellen Maschine zeigt, dass dieser Zustand mindestens ein Jahr andauert, die Häufigkeit jedoch seit März zugenommen hat.

Leistung der virtuellen DC3-Maschine



Der fehlerhafte Prozess ist SVChost.exe, der die Dienste DHCP-Client (dhcpcsvc.dll), EventLog (wevtsvc.dll) und LMHOSTS (lmhsvc.dll) umschließt. Ich bin mit Sicherheit kein Windows-Interna-Experte, aber ich konnte beim Anzeigen des Prozesses mit Process Explorer anscheinend nichts besonders Falsches feststellen, als dass das EventLog eine Menge RpcBindingUnbind- Aufrufe auslöst .

DC3-Prozess-Explorer für SVCHost.exe



Zu diesem Zeitpunkt habe ich keinen Kaffee und keine Ideen mehr. Wie soll ich dieses Problem weiterhin beheben?


quelle
Hier nur Spucken: 1. Verfügen Sie über ein Überwachungssystem, das die Ereignisprotokolle der DCs abfragt? 2. Haben Sie eine Art von Überwachung aktiviert, die möglicherweise zu einer starken Ereignisprotokollaktivität auf den Domänencontrollern führt?
Joeqwerty
1
Wollte mitmachen, als dieser Thread bei einer Google-Suche nach dem Ereignisprotokoll für hohe CPU-Auslastung auftauchte. Dieses Problem ist auf Server 2012 immer noch vorhanden. Es wurde genau dasselbe Problem auf einem Server 2012-Domänencontroller behoben. Überprüfen Sie die Größe der Protokolldateien. Der Standardprotokollpfad ist% SystemRoot% \ System32 \ Winevt \ Logs \ Overwrite. Die Radiooption kann bei größeren Protokolldateien Probleme verursachen. Ich habe meine so eingestellt, dass das Protokoll archiviert wird, wenn es voll ist und ein Rollover stattfindet.
KraigM
Für diejenigen, die von Google hierher kommen, gilt dieses Problem mit dem Ereignisprotokolldienst auch für Nicht-Controller-Windows Server-Computer. In meinem Fall, wenn genügend Benutzer mmc.exe(wahrscheinlich das Standardfenster "Server-Manager"?) Geöffnet sind, wurden auch regelmäßige Spitzenwerte erreicht.
Nickolay

Antworten:

25

TL; DR: EventLog-Datei war voll. Das Überschreiben von Einträgen ist teuer und / oder in Windows Server 2008 nicht sehr gut implementiert.


Bei @pk. und @joeqwerty Vorschlag und nachdem ich herum gefragt hatte, entschied ich, dass es am wahrscheinlichsten schien, dass eine vergessene Überwachungsimplementierung die Ereignisprotokolle kratzte.

Ich habe den Microsoft-Netzwerkmonitor auf einem der Domänencontroller installiert und mit dem Filtern nach MSRPC begonnen ProtocolName == MSRPC. Es gab viel Verkehr, aber alles befand sich zwischen dem RODC unseres Remote-Standorts und benutzte leider nicht denselben Zielport wie der abhörende EventLog-Prozess. Verdammt! Da geht diese Theorie.

Um die Dinge zu vereinfachen und das Ausführen der Überwachungssoftware zu vereinfachen, habe ich mich entschieden, den EventLog-Dienst von SVCHost zu entpacken. Der folgende Befehl und ein Neustart des Domänencontrollers reservieren einen SVCHost-Prozess für den EventLog-Dienst. Dies erleichtert die Untersuchung ein wenig, da an diese PID nicht mehrere Dienste angeschlossen sind.

SC config EventLog Type= own

Ich habe dann auf ProcMon zurückgegriffen und einen Filter eingerichtet, um alles auszuschließen, was diese PID nicht verwendet hat. Ich habe nicht Tonnen von Fehlversuchen von EventLog zu öffnen fehlenden Registrierungsschlüssel wie als mögliche Ursache angegeben hier (scheinbar crappy Anwendungen als registrieren Ereignisquellen in extrem schlechten Wege). Voraussichtlich habe ich viele erfolgreiche ReadFile-Einträge im Sicherheitsereignisprotokoll (C: \ Windows \ System32 \ WinEvt \ Logs \ Security.evtx) gesehen.

ReadFile Security.evtx

Hier ist ein Blick auf den Stack bei einem dieser Ereignisse: RpcBindingUnbind

Sie werden zuerst die RPCBinding und dann die RPCBindingUnbind bemerken. Es gab viele davon. Wie Tausende pro Sekunde. Entweder ist das Sicherheitsprotokoll sehr beschäftigt oder es funktioniert etwas nicht richtig mit dem Security.evtxProtokoll.

In EventViewer protokollierte das Sicherheitsprotokoll nur zwischen 50 und 100 Ereignisse pro Minute, was für eine Domäne dieser Größe angemessen schien. Verdammt! Es geht um die Theorie Nummer zwei, dass wir eine Anwendung mit sehr ausführlicher Ereignisüberwachung hatten, die links in einer vergessenen Ecke eingeschaltet war und immer noch pflichtbewusst davon tuckerte. Es wurden immer noch viele (~ 250.000) Ereignisse aufgezeichnet, obwohl die Rate der protokollierten Ereignisse niedrig war. Loggröße vielleicht?

Sicherheitsprotokolle - (Rechtsklick) - Eigenschaften ... und die maximale Protokollgröße wurde auf 131.072 KB festgelegt und die Protokollgröße lag derzeit bei 131.072 KB. Das Optionsfeld "Ereignisse nach Bedarf überschreiben" wurde aktiviert. Ich dachte mir, dass das ständige Löschen und Schreiben in die Protokolldatei wahrscheinlich harte Arbeit ist, besonders wenn sie so voll ist, dass ich das Protokoll lösche (ich habe das alte Protokoll gespeichert, nur für den Fall, dass wir es später für die Überwachung benötigen) und den EventLog-Dienst erstellen lassen eine neue leere Datei. Das Ergebnis: Die CPU-Auslastung erreichte wieder ein gesundes Niveau von etwa 5%.

Gemeinschaft
quelle
Gute Arbeit. Verschieben Sie außerdem das TL; DR an den Anfang der Antwort?
Zlatko
Nur zu Ihrer Information ... dies traf nur eine Reihe unserer Domänencontroller, von denen die meisten 2012/2012 R2 sind. Daher scheint es in neueren Windows Server-Versionen ebenfalls nicht gut implementiert zu sein.
HopelessN00b
Das ist also mein Problem, ABER ich habe das Archivieren so eingestellt, dass es voll ist und nicht überschreibt. Die maximale Protokollgröße beträgt 1 GB und die aktuelle Größe 639 MB. Ratlos, was zu tun ist, als das Protokoll als Test zu löschen. Dies ist auf 2008 R2 Std und wirkt sich auf den PDC und den sekundären DC aus. Beide sind VMs. Ich musste 2 Sockets / 1 Core für jeden DC zuweisen, oder sie haben beide 1/1-Zuweisungen festgelegt und reagieren nicht mehr. Das Hinzufügen von mehr RAM hat nichts bewirkt. Derzeit wird ständig zwischen 60 und 100% der CPU beansprucht.
Travis
Das Sicherheitsprotokoll wurde gespeichert / gelöscht. Läuft immer noch 74% der CPU-Auslastung.
Travis
5

Möglicherweise können Sie dies durch Erstellen eines kleinen Datenkollektorsatzes verfolgen.

  • Öffnen Sie den Systemmonitor und erstellen Sie einen neuen benutzerdefinierten Datenkollektorsatz.
  • Wählen Sie Manuell (keine Vorlage) und dann Nur Ereignisablaufverfolgungsdaten .
  • Fügen Sie den Active Directory-Domänendienst hinzu: Kerndaten , und speichern Sie den Satz.
  • Ändern Sie die Stoppbedingung unter Eigenschaften in 1 Minute.
  • Starten Sie das Set und warten Sie.
  • Wenn Sie fertig sind, konvertieren Sie die gespeicherte .etl- Datei mithilfe von in eine .csv- Dateitracerpt –l “file.etl” –of CSV
  • Analysieren Sie die Daten summary.csv und dumpfile.csv in Excel. Sie können dieses Import-DC-Info.xlsm-Dokument herunterladen , um Ihre Analyse zu erleichtern .

Wenn meine Vermutung stimmt, werden Sie sehen, dass einige Geräte (IP: Port) Ihren DC hämmern.

pk.
quelle
1

Sicherlich eine schwierige. Abgesehen davon, dass Sie es einfach in Ruhe lassen (1 CPU / 50% Last, wen interessiert das?), Könnten Sie versuchen, einen neuen Domänencontroller einzurichten und nach einigen Tagen feststellen, ob dieser Ihnen dasselbe Verhalten verleiht. Wenn dies der Fall ist, möchten Sie möglicherweise eine Wireshark-Ablaufverfolgung durchführen (offensichtlich verursacht dies dann etwas vom Netzwerk).

Das nächste, was mir einfällt, ist ein einfacher Anruf bei Microsoft

MichelZ
quelle
-2

Travis, "Archiv" hat dir nicht geholfen. Tatsächlich hat es Ihnen nicht geholfen, das Ereignisprotokoll zu löschen, als es 2/3 größer war. Aber "Archiv" hat KraigM geholfen.

kce: Löschte eine 131 MB "Überschreib" -Datei und verringerte die Leistung von etwa 55% auf 5%. FRAGE: Vielleicht haben Sie irgendwann wieder eine hohe Auslastung festgestellt, da dies (a) nur ausgelöst werden kann, wenn die Überschreibbedingung erreicht ist oder (b) Es kann linear schlechter werden, wenn die Größe der gelöschten Datei von 0 MB auf 131 MB ansteigt.

Einige sehen dies für die Datei security.evtx und andere für das Taskplaner-Betriebsprotokoll. Ich schlage vor, Ihr AV (welches Sie verwenden) vollständig zu deinstallieren und zu versuchen. Eindringlinge müssen ihre Spuren verbergen und ihre Spuren werden in geplanten Aufgaben erstellt, die sie einrichten oder bei denen sie sich anmelden. Sie verbergen ihre Spuren, indem sie die Punkte in diesen Ereignisprotokollen aufheben und sie neu schreiben, um über ihre Spuren zu springen. AVs können dies auf eine fehlerhafte Weise erkennen, da, wenn es Microsoft wäre, mehr von dieser hohen Auslastung berichtet worden wäre, aber ich sehe nur wenige Beiträge beim Googeln. Ich sehe dies auch auf Server 2008 R2 für das security.evtx-Protokoll. Keine Ereignisprotokoll-Abonnenten, keine externen Monitore. Ich habe ein paar AV-Dienste (McAfee) beobachtet, die ausgeführt wurden, und sie hatten eine sehr geringe Gesamtauslastung für einen Server, der so viele Tage in Betrieb war, dass ich vermute, dass er deinstalliert wurde, und dies nur teilweise (benötigt wahrscheinlich das spezielle Deinstallationsprogramm von McAfee), und ich frage mich, ob es Haken gibt Die verbleibenden (oder sogar normal installierten) McAfee-Dienst- oder McAfee-Filtertreiber, die ausgeführt werden, schreiben irgendwie normal in das Ereignisprotokoll und entscheiden in ihrer Filterung, dass sie dies in einen vollständigen Lesevorgang des gesamten Ereignisprotokolls umwandeln müssen. Vertrauen Sie mir, die Filtertreiber von Drittanbietern einiger AV-Unternehmen sind fehlerhaft und auf jeden Fall 10000x fehlerhafter als die Implementierung der Ereignisprotokollierung von Microsoft, was sehr wahrscheinlich perfekt ist. Zusammenfassend lässt sich sagen, dass 100% ALLE AV-Dateien deinstallieren, WENN das Problem behoben ist. Wenn ja, arbeiten Sie mit Ihrem AV-Unternehmen zusammen, um das Problem zu beheben. Es ist nicht ratsam, Ausnahmen für Dateien zu machen.

Beachten Sie bei der Verwendung von procmon auch die WriteFile-Aufrufe, da der Filtermanager durch das Writefile veranlasst wird, die gesamte Datei zu lesen. In meinem Fall wurde der Lesevorgang ungefähr 30 Sekunden nach Abschluss des Schreibvorgangs gestartet, was möglicherweise beabsichtigt ist. Aber es war konsistent und in meinem Fall hatte die Datei eine Größe von 4 GB, und das Lesen der Datei umfasste 64 KB Readfiles mit einer Länge von jeweils 64 KB. Dabei wurden 35% der CPU-Kapazität beansprucht. Sehr traurig.


Update 23.03.2016 Ich habe mir die Filtertreiber auf diesem Computer angeschaut, nachdem festgestellt wurde, dass dies durch einen von ihnen verursacht werden musste (der Ereignisprotokollmechanismus könnte niemals eigenständig fehlerhaft sein, oder die Anzahl der Berichte dieser Art wäre umwerfend und es ist nicht). Ich sah einige Filtertreiber von einem AV-Gerät und von einem bekannten Drittanbieter, der die Leistung von Festplatten für virtuelle Maschinen durch Vorausschau-Lesevorgänge steigert, und fragte den Chefarchitekten (der sehr freundlich und zuvorkommend war), ob sein Produkt das gesamte System möglicherweise übermäßig aggressiv liest Sicherheitsereignisprotokoll (was eindeutig pro Procmon geschah). Dies ist hilfreich für kleinere Sicherheitsprotokolle, jedoch nicht für die hier angegebenen Größen. Auf keinen Fall sagte er. Er stimmte zu, dass es der AV sein könnte.

Wie ich dem Azure-Kollegen weiter unten sagte, haben wir keine Nachfolger des ursprünglichen Posters, wenn das Problem nach dem Löschen des Ereignisprotokolls erneut aufgetreten ist, da dies eine häufige und fehlerhafte Lösung ist, da die Leistung mit der Zeit immer weiter abnimmt. Dies nennt man "Follow-up" und ich sehe aus erster Hand, dass die Lösung des ursprünglichen Posters diejenigen täuschen kann, die nicht glauben, dass sie das Problem gelöst haben. Fast hätte ich mich auch täuschen lassen. Ich habe das Ereignisprotokoll gelöscht und die Leistung verbessert - aber ich habe procmon verwendet und festgestellt, dass das Problem im Laufe der Zeit immer langsamer wird, bis es problematisch wird. Aus irgendeinem Grund kritisiert mich der Azure-Gefährte scharf, als das Originalplakat nicht weiterverfolgt wurde (möglicherweise gestorben, gefeuert, gekündigt oder beschäftigt). Der unten stehende Azure-Mitarbeiter meint, wenn das Original-Poster nicht weiterverfolgt wurde, muss es ein behobenes Problem sein. Das ist ärgerlich und rätselhaft, denn ich kann mir niemanden vorstellen, der technisch so hoch angesehen ist und diese Position einnehmen würde. Ich entschuldige mich, wenn ich einen Nerv getroffen habe. Vielleicht bin ich in meinem Aktivismus anderswo im Internet, wo ich Leute anrufe, auf die Nerven gegangen - hier (Serverfehler) bin ich einfach nett und teile tiefes technisches Wissen, und das Ergebnis von Herrn Azure ist ein Mobbing darüber, ob mein technischer Beitrag gerade ist notwendig oder ist für irgendeinen blog von mir (ich habe keinen solchen blog). Ich habe noch nicht die Absicht, diesen Link an ungefähr ein halbes Dutzend wichtige Bekannte bei Microsoft zu senden und sie zu fragen, was mit dieser Art von Mobbing von einem wichtigen MSFT-Mitarbeiter los ist, da ich mich einzig und allein darauf konzentriere, das Beste von Interesse zu haben Die Community im Kopf und die Antworten von Mr. Azure sind, in wenigen Worten, unglaublich, lebensgefährlich. nervenaufreibend und mobbend - was sicher manchen Spaß macht, anderen etwas anzutun. Ich war anfangs beleidigt, bin aber darüber hinweg und weiß, dass passive oder aktive Leser das, was ich sage, und meine Kommentare zu schätzen wissen - ich stehe zu 100% dahinter, ohne Rücksicht auf rechtliche Gründe, warum es hier auf subtile Weise unangemessen ist oder nicht. Herr Azure, bitte übe Freundlichkeit und unterlasse es, meine Kommentare in ein schlechtes Licht zu rücken. Gehen Sie einfach darüber hinweg und zeigen Sie Zurückhaltung und kommentieren Sie nicht noch einmal. Bitte übe Freundlichkeit und verzichte darauf, meine Kommentare in ein schlechtes Licht zu rücken. Gehen Sie einfach darüber hinweg und zeigen Sie Zurückhaltung und kommentieren Sie nicht noch einmal. Bitte übe Freundlichkeit und verzichte darauf, meine Kommentare in ein schlechtes Licht zu rücken. Gehen Sie einfach darüber hinweg und zeigen Sie Zurückhaltung und kommentieren Sie nicht noch einmal.

Harry

Harry
quelle
Offenbar wenden Sie sich an kommentierte Personen und nicht an das OP und die ursprüngliche Frage. Und Sie machen Vorschläge wie das Entfernen von AV. Das OP hat das Problem bereits gelöst und als Ereignisprotokollproblem identifiziert. Ich sehe das nicht als gültige Antwort.
David Makogon
Dies war ungelöst, wenn Sie die Plakate und meine Zusammenfassung sorgfältig gelesen haben. Sie müssen unter diesem Problem leiden, um ihre Worte viel sorgfältiger zu analysieren, als Sie es getan haben, und dies zu sehen. Es tut mir leid, dass Sie dazu nicht in der Lage sind und haben mich so hart beurteilt. Zum Beispiel sagte das OP, dass es wieder zu einem vernünftigen Wert von 5% zurückgekehrt sei, aber es hätte leicht nach dem Löschen des Protokolls zurückkehren können, und er verfolgte dies nicht weiter - tatsächlich passierte dies einem anderen Kommentator. Daher wurde nichts gelöst, da er nicht verifizierte, dass die Ergebnisse dauerhaft bei 5% blieben.
Harry
Sorry Harry - das ist keine Antwort; Sie machen Behauptungen über fehlerhafte Software und fordern das OP auf, mit dessen Antiviren-Unternehmen zusammenzuarbeiten. Dies ist ideal für Ihr persönliches Blog oder einen Artikel, aber ein Editorial ist keine Antwort auf eine zwei Jahre alte Frage mit einer akzeptierten Antwort, deren Hauptursache nicht mit Antivirus zusammenhängt.
David Makogon
@ Harry, überraschenderweise bin ich wieder hier und versuche es noch einmal herauszufinden :) Kein AV auf dem System. Ich habe ein paar Windows-Updates durchgeführt und die maximale Protokolldatei von 1 GB auf 500 MB geändert. Sogar bei 1 GB hat es nur einmal in 8 Monaten einen Rollover durchlaufen, während mein anderer DC einiges mehr rollt. Ich habe den Vorschlag "SC config EventLog Type = own" befolgt, um die Protokolldatei aufzubrechen. Nach dem Neustart ist der Evenlog-Prozess auf unter 1% gefallen. Die an den Prozess angehängten "dhcp und lmhosts" liegen ebenfalls unter 1% CPU. Ich habe nur ungefähr 15 Sicherheitsereignisse pro Sekunde registriert.
Travis
Ich vermutete, dass ein von mir ausgeführter SSO-Agent etwas damit zu tun hatte, da er viele Fehler aufwies. Das Deaktivieren des Dienstes führte jedoch auch nach einem Neustart nicht zu einer Verringerung der CPU-Auslastung. Der SSO-Agent ist gesichert und die CPU ist immer noch niedrig.
Travis