AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy HTTP CPU Auslastung
Thema durchsuchen
Ansicht
Themen-Optionen

Indy HTTP CPU Auslastung

Ein Thema von haentschman · begonnen am 4. Mai 2014 · letzter Beitrag vom 5. Mai 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#1

Indy HTTP CPU Auslastung

  Alt 4. Mai 2014, 10:17
Moin alle...

Ich habe einen Thread zum Datenabholen via HTTP je Gerät (entspricht einer Klasse). Heute habe ich ein 2. Gerät hinzugefügt (2. Instanz der Klasse) und bin über die CPU Auslastung gestolpert. Selbst mit einem Gerät ist die Auslastung während des Post rund 50%. (Taskmanager) Die Requests sind bei jedem Gerät u.U. ein wenig größer. Warum nehmen die Indys so viel Last?

Gibt es Möglichkeiten?

PS: Der Firefox nimmt auch so viel beim Refresh auf Google.

Quelltextauszug:
Delphi-Quellcode:
FHTTP:= TIdHTTP.Create;
  try
    FHTTP.OnWork:= DoOnWork;
    FHTTP.HandleRedirects:= True;
    FHTTP.Request.ContentType:= 'application/x-www-form-urlencoded';
    FHTTP.Request.CustomHeaders.Add(Cookie);
    try
      if Parameter = 'then
        FHTTP.Get(Link, ResponseStream)
      else
        FHTTP.Post(Link, ParameterStream, ResponseStream);
.
.
.
Bei der Geschwindigkeit mit der die Daten über die Leitung marschieren müßten sich die Kerne eigentlich langweilen...

Danke für Ideen, da ich bis zu 500 Geräte unterstützen will. ...ein Alptraum

Geändert von haentschman ( 4. Mai 2014 um 10:21 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Indy HTTP CPU Auslastung

  Alt 4. Mai 2014, 10:50
Hallo,

anhand des Codes läßt sich noch nicht viel sagen. Wenn jedes Gerät einen eigenen Thread und darin jeweils eine eigene Instanz von TIdHTTP verwendet, kann es dennoch zu Behinderungen der Threads untereinander kommen, zum Beispiel bei gemeinsamer Nutzung von VCL Objekten in der Methode DoOnWork. Ist bei nur einem aktiven HTTP POST die Belastung deutlich unter 50%? Falls ja, spricht das für Konkurrenzprobleme.

Ich würde das DoOnWork daher einfach einmal ausschalten und sehen ob die Last deutlich niedriger wird.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#3

AW: Indy HTTP CPU Auslastung

  Alt 4. Mai 2014, 11:34
Danke für deine Antwort.
Zitat:
Wenn jedes Gerät einen eigenen Thread und darin jeweils eine eigene Instanz von TIdHTTP verwendet
Das ist korrekt.
Zitat:
zum Beispiel bei gemeinsamer Nutzung von VCL Objekten in der Methode DoOnWork
DoOnWork hat keine Verwendung.
Zitat:
Ist bei nur einem aktiven HTTP POST die Belastung deutlich unter 50%
Nein. Das ist die Auslasung bei 1 Gerät. Bei 2 Geräten ist die Auslastung um die 90% Da kann man sogar nicht wirklich ein Fenster verschieben.

Ich hatte Breakpoints vor dem Post und danach. Bis der "danach" Breakpoint erreicht war stieg die Auslastung extrem an. Deswegen vermute ich das im Post bei großem Request.

Gibt es da Tricks oder Einstellungen? Die Google Suche hat mich nicht wirklich weitergebracht.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Indy HTTP CPU Auslastung

  Alt 4. Mai 2014, 11:39
Das ein Browser Last erzeugt ist ja auch klar, denn der muss ja nicht nur die Daten von einem Server laden, sondern die Seite rendern und das kostet Leistung.

Hat mit diesem Problem also nichts zu tun ... es sei denn deine Netzwerkkarte blockiert das System
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#5

AW: Indy HTTP CPU Auslastung

  Alt 4. Mai 2014, 11:56
Ist schon richtig...

Ich setzte mal nur zum Vergleich(nicht exakt):
1 HTTP Request mit 10KB Requestgröße -> 50% Auslastung 2 Sekunden
1 SQL - Masseninsert mit Firebird extern Table(549MB) -> 5 % Auslastung 15 Sekunden
...da stören mich einfach die Verhältnisse.

Beispiel:
Im Moment gibt es keine Datensätze. Die Anfrage braucht 2 Sekunden in der die Auslastung nach oben springt. Quasi für nix...
Delphi-Quellcode:
0
LOADOK
Ende: 2215 ms
Langsam drängt sich mir der Verdacht auf, daß das nicht die Indys sein können. Man stelle sich einen Download von 2 großen Dateien vor...

Geändert von haentschman ( 4. Mai 2014 um 12:42 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Indy HTTP CPU Auslastung

  Alt 4. Mai 2014, 13:36
Bei der Geschwindigkeit mit der die Daten über die Leitung marschieren müßten sich die Kerne eigentlich langweilen...
Zum Vergleich würde ich ein POST auf andere Zielserver versuchen, die Formulare mit application/x-www-form-urlencoded entgegennehmen. So liesse sich feststellen ob es am Server liegt.

Mit relativ wenig Zeitaufwand liesse sich das auch mit Indy's HTTP Server machen, ein OnCommandGet Handler ist schnell geschrieben.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#7

AW: Indy HTTP CPU Auslastung

  Alt 4. Mai 2014, 14:39
Sooo...
ich habe dann mal den HTTP Post in eine leere Anwendung 1:1 (außer Events) übernommen. Eine Schleife darüber und laufen lassen.
Ergebnis: CPU Last = 0-1%

Tschuldigung bei den Indys...

Dann gibt es jetzt eine Auskommentierorgie.

gefunden... Die Lösung ist so einfach, daß ich mich
Ich habe noch einen 2. Thread parallel. Bei diesem habe ich das Execute "vorbereitet" ohne wirklich die Proceduren zu füllen. Quasi nur den Rumpf. Dabei war aber eine while Schleife im Execute quasi ohne Inhalt. Das kann ja nicht funktionieren. Ein beherztes Sleep bis die Inhalte fertig sind... und gut.

Auslastung bei 2 Geräten: 0-1%

Tschuldigung für die Belästigung...

Geändert von haentschman ( 4. Mai 2014 um 15:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Indy HTTP CPU Auslastung

  Alt 4. Mai 2014, 19:57
Schön, dass wir mal drüber gesprochen haben
Das kostet aber ein Bier auf den nächsten DT
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Indy HTTP CPU Auslastung

  Alt 4. Mai 2014, 20:12
Wenn man seinen Threads einen Namen gibt (Delphi-Referenz durchsuchenTThread.NameThreadForDebugging), dann sieht man im Debugger auch schöner was wozu gehört.

Mit dem immer besser werdenden Thread-Debugging findet man vermutlich auch solche Threads dann schneller.



Schön wäre es, wenn Emba den KlassenNamen+Komponentennamen der TThread-Klasse standardmäßig automatisch daran übergeben würde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Mai 2014 um 20:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#10

AW: Indy HTTP CPU Auslastung

  Alt 5. Mai 2014, 05:09
Moin...
Zitat:
Wenn man seinen Threads einen Namen gibt (Delphi-Referenz durchsuchenTThread.NameThreadForDebugging), dann sieht man im Debugger auch schöner was wozu gehört.
...die habe alle schöne Namen. Wenn man an der verkehrten Ecke sucht nützt das nicht viel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:21 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