Home › Forum › Allgemeines › Allgemeines zu Nuclos › Frage zum Multicore-Support
- Dieses Thema hat 6 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 9 Jahren, 1 Monat von
Thorsten Kreutz.
-
AutorBeiträge
-
29 September 2014 um 16:26 Uhr #7914
Thorsten Kreutz
TeilnehmerHallo zusammen,
ich habe da mal eine technische Frage zum Multicore-Support. Hintergrund ist, dass wir die produktive Nuclos-Instanz immer noch mit Java 6 betreiben (müssen), da einzelne Clients mit einem alten MacOS darauf zugreifen, für die es noch kein Java 7 gibt.
Es laufen teilweise komplexere Jobs, die wir für die Datenbereinigung im Zuge einer Migration durchführen. Dabei fällt auf, dass auf dem Server (1 Prozessor, 4 Kerne) ein Kern mit 100% ausgelastet ist, während die anderen 3 sich langweilen. Ein Blick ins Web sagt, dass der Multicore-Support mit Java 7 stark verbessert wurde, dass es im Wesentlichen jedoch von der Implementierung abhängt.
Also wollte ich mal testen, wie es sich damit verhält, und habe auf einer virtuellen Maschine, die eine exakte Kopie des Servers bereitstellt, den Test gemacht. Tatsächlich scheint der Server die Lasten besser zu verteilen, jedoch auch unter Java 6 – und damit stellt sich die Frage, ob das mit Java, der Virtualisierung oder der Hardware zusammenhängt.
Da ich nicht einfach den Produktivserver auf Java 7 umstellen möchte, ist meine Frage daher, ob der Multicore-Support in Nuclos berücksichtigt ist und ob das (so meine Hoffnung) mit dem Einsatz von Java 7 auch noch verbessert wurde?
Vielen Dank und beste Grüße
6 Oktober 2014 um 16:13 Uhr #7929Thorsten Kreutz
TeilnehmerHabe selbst noch ein wenig weitergeforscht und herausgefunden, dass das Problem wohl eher die Postgres-Datenbank ist. Diese spawned pro Verbindung einen Prozess und lastet mit diesem dann bis zu 100% eines Kerns aus.
Demnach ist die Umstellung auf Java 7 nicht das Allheilmittel unserer Performance-Engpässe.
Beste Grüße,
kreutho6 Oktober 2014 um 19:08 Uhr #7930Frank Pavlic
TeilnehmerHallo kreutho,
falls Du Fragen oder Ideen benötigst, um den Grund der 100%-CPU-Auslastung zu finden, ich bin bereit 👿 . In der Regel sind es meistens schlechte SQL-Anweisungen, welche die CPU einfach belasten. Da würde ich ansetzen, also
Protokollierung in postgres einschalten und los geht’s .Gruß
Frank6 Oktober 2014 um 23:20 Uhr #7932Thomas Hempel
TeilnehmerHallo,
kleine Zwischenfrage an die Spezialisten: Verhält sich MS SQL-Server in dieser Hinsicht besser? Ich habe gerade einen Server mit 8 Kernen bestellt. Die möchte ich für nuclos nutzen können. Das spricht natürlich nicht gegen SQL-Optimierungen. (Wenn wir nur schon soweit wären..)
Die Frage ist: Unter welchen Bedingungen kann nuclos eine Mehrkernmaschine nutzen?
Gruß
Thomas7 Oktober 2014 um 15:39 Uhr #7935Thomas Hempel
TeilnehmerHallo,
nach kurzer Recherche habe ich das selbst beantwortet. Im SQL-Server 2005 kann man die Anzahl der nutzbaren Threads mit
max worker threads
einstellen. Eine standardeinstellung wird beim Start und
max worker threads = 0
automatisch errechnet.
Jetzt würde mich nur noch interessieren, ob PostgreSQL das tatsächlich nicht kann?
Gruß
Thomas7 Oktober 2014 um 18:13 Uhr #7936Frank Pavlic
TeilnehmerHallo Thomas,
die Antwort ist ja, man kann auch in postgresql per max_connections die maximale Anzahl an gleichzeitigen Verbindungen konfigurieren. Allerdings gibt es weitere Parameter, die bei Änderung des max_connections ebenfalls
angepasst werden müssen, sonst kann es passieren, dass der
Hauptspeicher aufgefressen wird.
Diesbezüglich findest Du unter
https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
mehr Informationen. Da wirst Du auch weitere Links zum Thema Connection Pooling in postgresql finden.Gruß
Frank16 Oktober 2014 um 22:51 Uhr #7958Thorsten Kreutz
TeilnehmerHallo ihr beiden und vielen Dank für die Diskussion – hatte schon gar nicht mehr damit gerechnet 😉
In der Tat bin ich jetzt auch erst mal beim Optimieren der Datenbank gelandet und werte das jetzt in der nächsten Zeit aus.
Aber eine Frage schon mal vorab: die max_connections bei Postgres zielen auf die gleichzeitigen Verbindungen ab. Die Frage ist ja, wie wird das bei Nuclos gelöst. Ich gehe jedenfalls mal davon aus, dass nicht jeder Client eine Verbindung zum Datenbank-Server öffnet – sondern vielmehr eine Art Pooling im Rahmen des Nuclos-Servers stattfindet. Wie viele gleichzeitige Verbindungen werden denn da so angelegt?
Danke & Gruß,
kreutho -
AutorBeiträge