Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Systemauslastung. Max an Threads und max Zugriffe auf DB (https://www.delphipraxis.net/148902-systemauslastung-max-threads-und-max-zugriffe-auf-db.html)

Jackie1983 10. Mär 2010 15:37


Systemauslastung. Max an Threads und max Zugriffe auf DB
 
Servus,

in meiner Anwendung wird für jede Aufgabe ein Thread gestartet.
Gerade hatte ich 105 Aufgaben und da ist das System komplett zusammen gebrochen :wink:

Gibt es irgend eine Begrenzung für die Anzahl der Threads die man nicht überschreiten sollte?
Jeder Aufgabenthread hat eine lokale Datenbank anbindung. Könnte es da auch zu Engpässen führen?
Verwende Xampp.

mfg

Astat 10. Mär 2010 15:47

Re: Systemauslastung. Max an Threads und max Zugriffe auf DB
 
Zitat:

Zitat von Jackie1983
Gibt es irgend eine Begrenzung für die Anzahl der Threads die man nicht überschreiten sollte?

Hallo Jackie1983, Ja es gibt eine Faustformel, die besagt Maximal 8 Threads pro Core,
wenn die Threads voll ausgelastet sind, und die Processor Queue Length nie über 1 ist.

D.h.

Viele Threads mit wenig Auslastung = Processor Queue Length <= 1 = OK!
Wenige Threads mit viel Auslastung = Processor Queue Length > 1 = Böse!

lg. Astat

Jackie1983 10. Mär 2010 15:54

Re: Systemauslastung. Max an Threads und max Zugriffe auf DB
 
Zitat:

Zitat von Astat
Viele Threads mit wenig Auslastung = Processor Queue Length <= 1 = OK!
Wenige Threads mit viel Auslastung = Processor Queue Length > 1 = Böse!

Hi Astat, wie könnte ich den die Auslastung der Threads messen? Weis ja nicht
was da gemacht wird und wie die Auslastung ist.

Mfg

gsh 10. Mär 2010 16:01

Re: Systemauslastung. Max an Threads und max Zugriffe auf DB
 
Ich weiß zwar nicht was das für Aufgaben sind, aber im Normalfall ist ein Worker Thread Pool und eine Aufgabenliste intelligenter.
Also im Prinzip eine Liste von Aufgaben und dann erstellst du 2 (4 oder 8 (je nach aufgabenart)) x (Anzahl CPU Cores) Threads die sich eine Aufgabe aus der Liste nehmen und diese dann abarbeiten.
Anderer Vorteil: Du musst nicht dauernd Threads erzeugen und freigeben und hast eine fixe Anzahl an Datenbank Verbindungen.

Wenn du es nicht so lösen willst dann schau mal ob die Datenbank ein Userlimit eingestellt hat.

Astat 10. Mär 2010 16:11

Re: Systemauslastung. Max an Threads und max Zugriffe auf DB
 
Hallo Jackie1983,

Remote mit Perfmon und "Processor Queue Length", Ram und CPU Auslastung, Threads, File-IO, Netzwerk etc. monitoren.

Zuallererst, würde ich die Maximalanzahl der Threads in Deiner Applikation auf ein erträgliches Maß heruntersetzen.

D.h. nicht bei jedem Zugriff einen Thread erzeugen (vermute hier einfach mal ein Client Server System), sondern

Workerthreads mit Input-Queue verwenden.

EDIT: gsh hat es treffender formuliert!


Anzahl der CPU-Cores * 8 = Anzahl der Workerthreads.

lg. Astat

Jackie1983 10. Mär 2010 16:32

Re: Systemauslastung. Max an Threads und max Zugriffe auf DB
 
Ok. Die Aufgaben stehen in einer Datenbank und werden im x Minuten takt wiederholt.
Andere Aufgaben nur einmalig und wiederum andere Aufgaben nur bei Usereingaben.

Zu erst hatte ich es so das es einen Jobthread gibt, der hat alles nacheinander abgearbeitet.

Problem, wenn ein Job zu lange braucht, kommen die anderen erst viel später dran.
Also habe ich einen Hauptthread. Der kontrolliert die Db und liest alle jobs aus die abgearbeitet werden müssen
und erstellt für jeden Job ein Thread.
Jetzt habe ich eine Threadbegrenzung eingebaut. Einfach ein counter der zählt wie viele Threads es gibt. Wird x erreicht werden keine Threads mehr erstellt bis die alten beendet wurden.

Weil wenn ich doch wieder einen Jobthread erstelle und dort alle Jobs eintrage, sammelt sich doch die Jobliste wieder.

//Edit
Eventuel noch hilfreich, damit man weis was die Jobs sind. Mit dem Programm werden unsere Server überwacht.
Ein mini System was aber schnell arbeiten soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz