AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ursache für dauerhafte CPU-Auslastung finden

Ursache für dauerhafte CPU-Auslastung finden

Ein Thema von CodeX · begonnen am 8. Feb 2021 · letzter Beitrag vom 10. Mär 2021
Antwort Antwort
Seite 1 von 5  1 23     Letzte » 
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#1

Ursache für dauerhafte CPU-Auslastung finden

  Alt 8. Feb 2021, 18:12
Ich habe hier ein relativ großes Delphi-Projekt vor mir, wo das Programm minimiert im Tray ohne jegliche Aufgabe eine dauerhafte CPU-Auslastung von 0,1% - 0,2% im Task-Manager anzeigt (andere im Hintergrund laufenden Anwendungen haben 0%). Das mag erstmal nicht schlimm erscheinen, aber normalerweise ist das ein Zeichen dafür, dass irgendetwas nicht passt und dann an anderer Stelle Probleme machen könnte.

Ich frage mich nun, wie ich die Ursache herausfinden kann.
  • Zunächst habe ich es mir mit dem Process Explorer angeschaut. Dort sehe ich mehrere Threads der Anwendung.
  • Der Thread mit der niedrigsten TID (Hauptthread?) schwankt durchgehend zwischen 0.10 und 0.22 herum.
  • In der "Start Address" Spalte steht Name.exe!TMethodImplementationIntercept+0x... Was ist das?
  • Der Stack für diesen Thread zeigt zwar eine Liste mit 27 Einträgen an, aber diese beziehen sich mit Ausnahme des genannten Eintrags auf Windowskomponenten, sodass ich dadurch auch nicht schlauer werde.
  • Im Debugger sehe ich im Threads-Tab alle Threads, die auch im Process Explorer angezeigt wurden, also auch den betroffenen Thread, aber scheinbar kann man dort nichts damit machen (State: Runnable; Status: [leer]).
Wie komme ich jetzt weiter? Kann ich in der IDE irgendwie einen besseren Stack Trace als per Process Explorer anzeigen lassen? Sowas wie madExcept nach einer Exception anzeigt, nur eben im laufenden Betrieb ohne Fehler?
Oder komme ich irgendwie anders weiter?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#2

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 8. Feb 2021, 18:17
AQTime?



Ein Thread hat auch einen Parent-Thread.
Ich glaub der PE sollte dazu auch was anzeigen.

Mit etwas Glück wurde auch der Stacktrace beim Erstellen des Threads gespeichert, so sieht man dann wer den Thread erstellt hat und bekommt so die Antwort wofür der Thread sein soll.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
608 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 9. Feb 2021, 08:30
Hallo, das ist mir auch schon aufgefallen. Ging vor gut einem Monat los. Ich denke ein Windowsupdate oder der Windows Defender sind schuld an der höheren CPU last. Es sind auch nicht nur Delphi Programme betroffen.

Für...
  • In der "Start Address" Spalte steht Name.exe!TMethodImplementationIntercept+0x... Was ist das?
...hilft erstmal Tante Google weiter. Da gibt es ein paar interessante Infos, die bisher beste ist aus meiner Sicht:
unwanted-export-tmethodimplementationintercept
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#4

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 9. Feb 2021, 11:00
Vermutlich könnte mir das weiterhelfen. Habe jetzt ein bisschen was dazu nachgelesen und ein Video bei YT angeschaut. Im GetIt sind 262 Pakete vorhanden, aber AQTime ist nicht darunter. Bei den Embarcadero Downloads finde ich nur Versionen für Delphi bis XE8.
Wo kriege ich denn eine funktionierende Standard Version für 10.3 her?

Ein Thread hat auch einen Parent-Thread.
So wie ich das deute, handelt es sich ja um den Main-Thread, also um das Hauptprogramm an sich.

...hilft erstmal Tante Google weiter. Da gibt es ein paar interessante Infos, die bisher beste ist aus meiner Sicht:
unwanted-export-tmethodimplementationintercept
Ich habe natürlich als erstes danach gesucht, aber es schien mir eher eine generische Fehlerquelle zu sein, also dachte ich, die aus etwas Anderem resultiert. Da ich bei meiner Recherche auch Rtti als Stichwort gefunden habe, habe ich auch geschaut, ob ich hier etwas in der Richtung im Projekt anpassen kann. Da Rtti in dem Projekt gänzlich unerwünscht ist und das Programm nur unnötig aufbläht, wurde es soweit es ging aus dem Projekt entfernt. Da dies ja leider nicht mehr zentral geht, ist in jeder Unit ein Include von diesem Code enthalten:
Delphi-Quellcode:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
Wenn man es irgendwie noch besser und komplett entfernen könnte, bitte sagen!
Ich habe den Teil dann testweise auskommentiert und neu kompelliert, um auszuschließen, dass genau dieses Entfernen etwas damit zu tun hat, aber das CPU-Ergebnis war das gleiche. Lediglich die Exe ist um 10% angewachsen.

Deine verlinkten Infos sind sehr interessant, aber ich weiß nicht, ob mich das weiterbringt:
Ich kann nicht auf eine Delphi-Version vor XE5 wechseln und es handelt sich bei mir nicht um eine DLL.
System.Rtti wird im Projekt nirgends eingebunden. Wahrscheinlich durch irgendeine andere System-Unit oder Komponente.
Die einzige dort empfohlene Option wäre, die System.Rtti zu bearbeiten und den TMethodImplementationIntercept Teil (oder nur die exports Zeile?) auszukommentieren. Das erscheint mir ein bisschen wie mit der Brechstange. Gibt es vielleicht noch irgendeinen anderen Ansatz? Wenn wirklich Rtti Schuld ist, dann Rtti irgendwie komplett aus dem Projekt verbannen?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 9. Feb 2021, 11:36
Darf deine Anwendung auch etwas tun?
0,1% - 0,2% ist doch gar nichts.
Deshalb nach einen angeblichen Fehler zu suchen ist etwas suspekt.
just my 2 cent!
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 9. Feb 2021, 13:54
Darf deine Anwendung auch etwas tun?
0,1% - 0,2% ist doch gar nichts.
Deshalb nach einen angeblichen Fehler zu suchen ist etwas suspekt.
just my 2 cent!
Wenn die Anwendung etwas tun soll, dann darf sie das auch. Hier tut sie im minimierten Zustand aber nichts.

Wenn das jeder Prozess im Hintergrund so tun würde, dann wäre die CPU dauerhaft ausgelastet. Alle anderen inaktiven (Hintergrund-)Prozesse sind ja konstant bei 0%. Warum dann meiner nicht? Warum ist das ein "angeblicher" Fehler? Eine Anwendung, die nichts tut und nicht sichtbar ist, darf nicht dauerhaft CPU-Leistung fordern.

Zudem musst Du bedenken, dass die Angabe 0,2% bei (in meinem Fall) 8 Kernen und damit 16 logischen Prozessoren, einen davon zu 3,2% auslastet. Ohne etwas zu tun wohlgemerkt.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
628 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 9. Feb 2021, 14:21
Irgendwo hast du ja einen "Idle" Loop drinnen, der auf eine Eingabe wartet um aktiv zu werden. Was passiert denn da in dem Loop genau?

Geändert von Rolf Frei ( 9. Feb 2021 um 15:02 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.377 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 9. Feb 2021, 14:33
procmon?

Vielleicht bekommt die App Windows-Botschaften von ausserhalb.

Geändert von freimatz ( 9. Feb 2021 um 15:05 Uhr)
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#9

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 9. Feb 2021, 16:15
procmon?
Vielleicht bekommt die App Windows-Botschaften von ausserhalb.
Habe jetzt eine Weile mit dem Process Monitor draufgeschaut. Die Anwendung macht im minimierten Zustand rein gar nichts. Zumindest nichts, was sich dort anzeigen ließe.

Und ich habe natürlich keinen Idle-Loop, der auf eine Eingabe wartet, sonst wüsste ich ja, wo das Problem zu suchen ist. Falls irgendsowas in einer Delphi-Unit drin ist, wäre ja genau das herauszufinden.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 10. Feb 2021, 09:30
Glaskugel sagt: Du hast einen externen Thread, der mit Sleep(...) in Dauerschleife läuft und irgendwas pollt/pollen soll.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz