Kann man performance steigern durch Java update?

renegade2k

Cadet 4th Year
Registriert
Aug. 2011
Beiträge
106
Moin.

Wir betreiben in der Firma eine bestimmte Software (welche genau würde ich vorerst lieber nicht sagen), die Firmen-(Roh-)Daten auswertet und "BWL-gerecht" aufbereitet, damit diese dann von anderen weiter verarbeitet werden können ...

Ich bin mit einer von denen, die diese Aufbereitung anleiten.
Nun ist es so, dass diese Software, wenn man es mit Daten füttert, stunden lang vor sich hin rödelt. Teilweise bei ca. 25GB Daten bis zu 20h. Mag ja auch legitim sein, denn was im Hintergrund passiert ist nur dem Herausgeber der Software bekannt.
Interesses halber habe ich aber ein Blick in den Task-Manager geworfen und gesehen, dass über die gesamte Laufzeit ein Prozess den Rechner auslastet. Und der Prozess ist openJDK.
Auf dem Rechner an sich befindet sich keine Java Version installiert, aber der Software Hersteller bring seine eigene Bibliothek mit. Das habe ich ein bisschen weiter verfolgt und gesehen, dass im Programm-Ordner eine openJDK in Version 13... installiert ist.

Es ist doch so, dass Java grundsätzlich abwärtskompatibel sein sollte ("sollte" ... nehmen wir für die nächste Überlegung mal als "ist" hin).
Würde es Vorteile in Hinsicht auf performance bringen, wenn man die Java Version aktualisiert?

Ich habe dazu leider nichts genaues gefunden. Klar wird gesagt, in den neueren Versionen befinden sich performantere Funktionen und Methoden, aber diese neuen Funktionen werden ja von der Software nicht genutzt, da diese immer noch darauf getrimmt ist mit den "alten" Funktionen aus V13 zu laufen.
Es belibt aber die Frage, laufen die "alten" Funktionen in den neueren Versionen von Java besser bzw. schneller ab, sodass man die Arbeitszeit effektiv verkürzen könnte?
 
Nicht zwangsläufig. Ich habe keine Ahnung von java, aber meine Überlegung:

Vergleiche ich es mal mit DirectX. Jedes Spiel bringt seine eigene angepasste Bibliothek mit. Die Grund Version kann ich updaten, aber wenn das Programm eben nur die angepassten Bestandteile benutzt wird sich bezüglich Performance nichts ändern.

Is nur n Gedankengang, helfen wird der wahrscheinlich nich.
 
Wende DIch an den Hersteller der Software. Da die Software nur Singlethreaded arbeitet, holst Du am meisten raus, wenn Du mehr Cores auslasten kannst und nicht, wenn eine Funtkion mal 6% schneller wurde
 
renegade2k schrieb:
Es ist doch so, dass Java grundsätzlich abwärtskompatibel sein sollte
Nein, sollte sie nicht, daher kann man es auch nicht annehmen. Ein java 17 ist zwar neuer als java 11 hat aber andere Features (ist ja nur eine API). Es kann laufen, muss aber nicht. Die einzige Möglichkeit um auf die Performance Einfluss zu nehmen ist wohl der Wechsel auf eine anderen Anbieter des Jdk. Da kann man ggf von Compileroptimierungen oder auch Tweaks am Garbage collector profitieren. Aber das muss man ausprobieren.
 
Prüfe ob nur ein Kern genutzt wird.
Steht genügend Arbeitsspeicher zur Verfügung? Ist der Arbeitsspeicher auch in Java so konfiguriert?
Wie viele CPU Kerne hat die Kiste?
Welcher storage liegt da drunter also SSD oder Mixed oder nur reine HDD
 
renegade2k schrieb:
Es ist doch so, dass Java grundsätzlich abwärtskompatibel sein sollte ("sollte" ... nehmen wir für die nächste Überlegung mal als "ist" hin).
gilt nicht immer, manche Dinge sind in späteren JDKs rausgefallen und/oder müssen explizit aktiviert werden
renegade2k schrieb:
Würde es Vorteile in Hinsicht auf performance bringen, wenn man die Java Version aktualisiert?
unwahrscheinlich, es wird eher auch danach 20h dauern. Es gibt ein paar andere JVM Distributionen, GraalVM, Zulu etc - aber selbst dann wirst du wohl kaum Stunden reduzieren.

Wenn man bessere Performance haben möchte, dann würde man wohl heutzutage das ganze wohl einfach anders programmieren - nicht dass jemand von uns hier überhaupt weiß was genau die Anwendung auswerten soll und wie, und niemand hier weiß wie die aktuelle Software was macht - aber es gibt zumindest für Batch Processing und Analytics heute wohl sehr dankbare Frameworks, die eine verteilte und/oder parallele Verarbeitung sehr einfach umsetzbar machen , z.B. Apache Spark, Flink, usw., welche auch auf einem einzelnen Rechner dann gebrauch von CPU Kernen und Ressourcen machen. Sofern die Daten und Aufgaben in diesem Fall überhaupt teilbar/parallelisierbar sind.

Aber wie gesagt, niemand kennt die aktuelle Software noch die konkreten Aufgaben, die sie löst.
 
Wenn das in das Programm implementiert wurde, wird es schwer, eine andere java Plattform zu nutzen, respektive die Berechnungen schneller zu verarbeiten
Frag den Hersteller der Software, wieso das so langsam ist und welche Optionen ihr habt um Performanter zu arbeiten.
 
Wenn die Java Anwendung die CPU voll auslastet, kann das auch an einer Zuweisung von zu wenig Speicher liegen. Java nutzt ohne weitere Einstellungen nur ein Viertel des Arbeitsspeichers und wenn dieses Limit von der Anwendung erreicht wird, kann der Garbage Collector für eine volle Auslastung der CPU sorgen, weil er ständig mit einer aufwendigen Analyse versucht ungenutzte Ressourcen zu finden.
Man kann sich mit der jconsole.exe (sollte im jdk/bin Verzeichnis liegen) auf den Prozess verbinden und im Memory Tab sehen wie viel Zeit der Prozess im Garbage Collector verbringt. Wenn die Anwendung zu viel Zeit im Garbage Collector verbringt, kann man die Anwendung beschleunigen indem man ihr mit -Xmx mehr Speicher zuweist.
 
  • Gefällt mir
Reaktionen: renegade2k
Ich arbeite im Technischen Support bei einer Firma die auch einen ETL hat, der mit OpenJDK arbeitet.
Meld dich mal per PN, würde mich interessieren, von welcher Software du sprichst, vielleicht kann ich
helfen..

Aber so als Spoiler... ein Update wird performancemässig mit Sicherheit nix bringen, du wirst
aber unter Umständen euer System kaputt machen, zumindest es aber zu einem "unsupporteten"
System machen... mit hoher Wahrscheinlichkeit.

Wenn der Java - Speicher ausreichend dimensioniert ist, dann gibt es da auch wenig "Tweaking - Potential".
Vielversprechender ist da eher der Ansatz, mal eure ETL Strecke anzuschauen, ob es da was zu
optimieren gibt. Z.b. Parallelisierung, Looping etc.
Aber das hängt natürlich stark von der Software ab, was da möglich ist.
 
Zuletzt bearbeitet:
Welches Java in welcher Version für diese Software freigegeben ist, kann dir nur der Hersteller sagen.
Wenn der Prozess so ewig lange dauert, ist entweder die Software nicht für diese Datenmengen ausgelegt, die Hardware unterdimensioniert, oder der Storage viel zu langsam. Ein anderes SDK wird kaum eine spürbare Beschleunigung bringen.
Also setze dich mit dem Hersteller in Verbindung und kläre das Problem mit ihm ab.
 
Dir sollte auch bewusst sein, das wenn du die Java Version austauscht, du den Support durch den Hersteller verlierst. Die testen ihre Software mit der mitgelieferten Version (es gibt nicht umsonst den Begriff der "Versionshölle" bei Java). Wenn du daran rumdoktorst und Probleme auftreten, wird der Hersteller jede Schuld (berechtigterweise) von sich weisen. Schlimmer noch: wenn die Fehler gar nicht bemerkt werden und ihr falsche Daten bekommt...
Also: nur in Absprache mit dem Hersteller.
 
  • Gefällt mir
Reaktionen: ni-sc
Zurück
Oben