Anzeige

Am Puls von Microsoft

Anzeige

[gelöst] Brauche Hilfe bei Trace-Analyse - System wird langsam wenn die Maus auf dem Desktop steht

Status
Dieses Thema wurde gelöst! Lösung ansehen…

GreenEyedAndy

Herzlich willkommen
Hallo,
wir haben ein seltsames Problem. Es ist auf Windows Server 2016 aber auch auf "normalem" Windows 10 reproduzierbar.
Wir führen ca. 160 Prozesse auf dem System aus. Die Gesamt-CPU-Auslastung beträgt ca. 10-16%.
Nun das Problem:
Jedes mal, wenn sich der Mauszeiger auf dem leeren Desktop befindet (also nicht über einem Icon oder irgendeinem Fenster), ist das System unheimlich langsam.
Nicht nur unsere Prozesse, sondern auch alle anderen (sogar ein Processhacker-Fenster) verhalten sich absolut langsam.
Befindet sich der Mauszeiger nun aber über einem Fenster oder der Taskleiste - alles ist wieder gut.

Ich hatte ein Gespräch mit Bruce Dawson Link zu seinem Blog, aber er hat (natürlich) nicht die Zeit, meinen ETL-Trace zu analysieren. Er schlägt vor, es online zu stellen und um Hilfe zu bitten.

Ich habe einen Screenshot von WPA gemacht, um es kurz zu erklären:

Screenshot 2021-08-10 110637.png


Ich habe den Screenshot mit Anmerkungen versehen, damit man sehen kann, wo sich die Maus auf dem Desktop oder Fenster befindet.
In der Stacks-Ansicht kann man sehen, dass die Anzahl der Kontextwechsel sinkt, wenn die Maus über dem Desktop ist und in der CPU-Auslastung (Sampled)-Ansicht gibt es RtlUserThreadStart-Einträge genau für diese Zeit, aber ich habe keine Ahnung, woher sie kommen.

Der erste unserer Prozesse ist die "ProcessController.exe", die alle anderen wie "GpioController.exe", "DCIIF_Simulation" oder "RouterIF_Simulation.exe" usw. startet. Sie alle kommunizieren mit einem Prozess namens "StatusController.exe", aber in diesem Trace gibt es nur einen Heartbeat zwischen diesen.

Bruce sagte mir, ich solle den Punkt finden, an dem unser Prozess auf etwas wartet, aber ich kann kein Lock oder ähnliches finden.

Ich habe einen gezippten etl-trace hochgeladen, falls jemand die Herausforderung annehmen möchte.
Gezippter ETL-Trace
 
Zuletzt bearbeitet:
Anzeige
T

Tekkie Boy

Gast
Hallo und Willkommen @GreenEyedAndy

Ich bin mit dem Thema WPA nicht vertraut, aber mal angenommen das Dir hier keiner weiterhelfen könnte, versuche es mal auf Tenforums.com im Performance & Maintenance Bereich.

Dort ist User @zinuo der mir bekannte WPA Experte.

Und auf superuser.com ist mir noch @magicandre1981 bekannt.

Aber warte erstmal ab, ob sich nicht doch noch jemand meldet.

Viel Glück!
 

Franz

Moderator
Hallo und herzlich Willkommen bei uns :),

eine Frage vorweg:
handelt es sich um einen virt. Server?
Es ist auf Windows Server 2016 aber auch auf "normalem" Windows 10 reproduzierbar.
Wenn ja, welches Programm nutzt Du als VM?
 

Franz

Moderator
Den Trace habe ich mir erst heute morgen angeschaut, quelle fauxpas.
D.h., die Auslastung findet auch bei Clients statt?
Das hieße, das Problem wäre Netzwerk übergreifend.
Ext. Einstellungen/Zugriffe in/auf z.B. Firewall, AV, NAS kämen hier in Frage.
Ist das ein DC oder eine OU?
In der Kurzanalyse deines Traces wurden versch. Events von win32k.sys als Fehler angezeigt,
win32k.exe erzeugt übrigens ähnliche Fehlermeldungen.
 
Zuletzt bearbeitet:

GreenEyedAndy

Herzlich willkommen
Hallo @Franz,
wie kommst du darauf, das auch die Clients betroffen sind? Meiner Meinung nach sind sie nur deshalb betroffen, weil die Prozesse auf dem Server so langsam sind. Das macht sich natürlich auch auf den Clients bemerkbar, wenn die Daten von den Prozessen erhalten wollen.
Mit OU und DC meinst du OU = Organizational Unit bzw. DC = Domain Component? Das kann ich dir gerade gar nicht sagen. Ich versuch das heraus zu bekommen, dann schreibe ich es hier rein.
Kannst du mir schreiben, wie man eine solche Kurzanalyse macht? Was bedeuten diese Fehlermeldungen?
Tut mir leid das ich soviel frage, aber ich kenne mich nicht wirklich mit der Analyse von Windows-Problemen aus.

Wir können das alles auch ohne einen einzigen Client reproduzieren. Ich denke, es kann nicht am Netzwerk liegen.
 
Zuletzt bearbeitet:

Franz

Moderator
Ganz so natürlich ist das nicht.
Wenn Clients bei der selben Aktion (hier: Cursor auf leerem Desktop) genauso reagieren wie der Server, hat ein Prozess auch direkten Einfluss auf die Clients. Mehrere Prozesse schließe ich aus, ehrlich gesagt.
Bisher wissen wir aber noch nichts über ext. Einflüsse (s.o.) im Netzwerk, gibt es eine (Hardware-) FW & AV oder ein NAS?
Für mich ist wichtig, welche Rolle der Server im Netzwerk besitzt, deshalb die Frage nach DC oder welcher OU.
Wie Trace-Dateien auf fremden PCS gelesen werden können, schreibe ich später, ist etwas ausführlicher.
 

Franz

Moderator
Hmm,
eigentlich erhoffte ich auf neuen Input deinerseits, oder vielleicht konntest du ja das Problem schon lösen.
Falls nicht, kannst du zwischenzeitlich evtl. auch mit dem Process Explorer genauere Quellen ausfindig machen.
Schaden kann's sicher nicht.
 

GreenEyedAndy

Herzlich willkommen
In unserem Testsystem gibt es keine Hardware-Firewall, Defender läuft, es wird nicht auf ein NAS zugegriffen. Der Server macht keinerlei Domian-Verwaltung oder ähnliches, er ist nur dafür da unsere 160 Prozesse laufen zu lassen.
Wir haben gerade entdeckt, dass es wohl in den, mit Delphi geschriebenen Programmen, ein VCL internes Problem mit der Erkennung des TApplication.Idle Zustandes gibt. Nun sind wir auf der Suche, wie wir unseren angepassten Code in die Forms.pas integrieren können ohne das alle fremd Komponenten neu compiliert werden müssen. In unserem Testprogramm hat der "Fix" schon funktioniert.
 

GreenEyedAndy

Herzlich willkommen
Nachdem wir es geschafft hatten, Debug-Symbole zu einigen unserer Prozesse hinzuzufügen, fanden wir das Problem in der Delphi-VCL/Forms.pas.
In einem neuen Trace mit Debug-Symbolen haben wir gesehen, dass die Application.DoMouseIdle-Methode viel Zeit damit verbringt, VCLWindows zu finden, Parents davon abzurufen und so weiter.
Die Quelle der Verlangsamung ist die Methode "FindDragTarget". Unsere Prozesse brauchen keine Drag'n'Drop-Funktionalität und sie brauchen keinen Hinweis, der irgendwo angezeigt wird. Also haben wir diesen Funktionsaufruf aus dem Code herausgeschnitten, was nicht einfach war.
Jetzt läuft alles schnell und unabhängig von der Mausposition.
 

Franz

Moderator
Super dass ihr es herausgefunden habt, freut mich. (y)(y)
Und herzlichen Dank für Deine ausführliche Rückmeldung. :)
 
Status
Dieses Thema wurde gelöst! Lösung ansehen…
Anzeige
Oben