exe Anwendung CPU-/Speicherverbauch

J90

Aktives Mitglied
Hallo,

ich möchte den CPU- und Speicherverbauch meiner Anwendung reduzieren( welche auf einem VPS-Server laufen soll) und wollte wissen, was die beste Art ist (unabhängig vom Codeaufbau, Annahme, dass dieser optimiert sei).
Aktuell ist meine bisherige Erkenntnis/Erfahrung, dass ein AOT-kompilierte Exe-Datei (also nativer Code) besser läuft und weniger verbraucht (mittels Excelsior JET).
Ich habe nun das Problem, dass ich aktuell bei einer Anwendung sehr viele Jar-Dateien zur Laufzeit lade(und vermute, dass dies der Grund ist für eine schlechtere Performance) und wollte fragen, ob beispielsweise ein Erzeugen von dll-Dateien möglich und effektiv ist?
Müssten die Jar Dateien nicht einen negativen Einfluss haben, da es sich um Class Dateien handelt?
Hilfe und Anregungen wären nett, da ich in diesem Thema nicht stark bewandert bin und ich erstmal dem Herumprobieren das Fragen vorziehe...
 

mrBrown

Super-Moderator
Mitarbeiter
ich möchte den CPU- und Speicherverbauch meiner Anwendung reduzieren( welche auf einem VPS-Server laufen soll) und wollte wissen, was die beste Art ist (unabhängig vom Codeaufbau, Annahme, dass dieser optimiert sei).
Üblicherweise sind genau diese Dinge die, mit denen man am meisten bewirken kann. Codeaufbau und Algorithmen optimieren.

Wenn du schon Server ansprichst, in was für eine Richtung geht die Anwendung denn?
Eher typische Server-Anwendung oder eher "Number-Crunching"?
Lange am Stück laufend oder häufige Kaltstarts?
Viel "dynamischer" Code oder eher statisch?

Aktuell ist meine bisherige Erkenntnis/Erfahrung, dass ein AOT-kompilierte Exe-Datei (also nativer Code) besser läuft und weniger verbraucht (mittels Excelsior JET).
Hast du das über einen längeren Zeitraum getestet, ob es wirklich besser läuft? JITs brauchen einige Zeit, können damit aber besser optimieren.

Ich habe nun das Problem, dass ich aktuell bei einer Anwendung sehr viele Jar-Dateien zur Laufzeit lade(und vermute, dass dies der Grund ist für eine schlechtere Performance) und wollte fragen, ob beispielsweise ein Erzeugen von dll-Dateien möglich und effektiv ist?
Mit Excelsior JET müsstest du das alles AOT-compilieren können. Sehr Performance-kritischen Code kann man natrolch auch in einer System-näheren Sprache schreiben und aus dem Java-Code aufrufen.

Müssten die Jar Dateien nicht einen negativen Einfluss haben, da es sich um Class Dateien handelt?
Wenn du die Klassen brauchst und die irgendwas machen, hat das natürlich negativen Einfluss auf die Performance (weil "irgendwas machen" nunmal teurer ist als "nichts machen"). Wenn du sie brauchst, führt aber eben auch kein Weg dran vorbei.

Hilfe und Anregungen wären nett, da ich in diesem Thema nicht stark bewandert bin und ich erstmal dem Herumprobieren das Fragen vorziehe...
Der erste Schritt wäre viel Profiling - was braucht viel RAM und CPU (und was heißt überhaupt "viel" und was wäre passend).
Wenn man das weiß, kann man da gezielt optimieren, zB mit besserer Struktur und Algorithmen oder nativem Code oder GC, passenderer JVM/JIT.

Die Laufzeitumgebung (JIT/AOT, Jars die viel kosten, ...) hat meistens deutlich weniger Einfluss, als die eigentliche Anwendung.
Grad wenn man da nicht bewandert ist (wie du sagst), übersieht man dabei oft die eigentlichen Performance-Killer.
 

J90

Aktives Mitglied
Ist eine typische Serveranwendung, welche durchgehend läuft ohne Unterbrechung (ganzjährig, außer sie wird manuell neu gestartet).
Das Programm stellt eine Netzwerkverbindung über das FIX Protokoll her (Trading), was sehr viele Jars benötigt. Verglichen mit meinen
anderen Anwendungen existieren hier daher sehr viele Imports aus Jars anstelle von eigenem Code
(da eben nur lauffähig mit angebotenen Libraries).

Im Code wird relativ häufig Reflection verwendet, um bestimmten externen Code, welcher zur Laufzeit über den Classloader geladen wird,
auszuführen. Dies ist notwendig, um beim lauffenden Programm externen Code einbinden zu können (d.h. ohne Neustart der Anwendung).
Alternative wären vll auch dlls, aber erstmal muss ich die anderen Teile deswegen testen.

Die Frage ist nur, ob sich der Code noch verbessern lässt, wovon ich eher weniger ausgehe (mit Ausnahme des Einbauens von kleinen Thread.sleep() zu
bestimmten Zeitpunkten, um die CPU Auslastung zu verringern).

Beispielsweise mit VisualVM liegt der Speicherbedarf beim Used Heap bei 60-70 MB und der Heap Size bei 100MB, allerdings verändert sich dies
im Task Manager auf einem Betriebssystem zu 500MB(..).
Eine vergleichsweise ähnliche Anwendung (in C++ geschrieben) braucht nur 50MB.
Vermutlich ist mein Code nicht total perfekt, aber ich würde eher vermuten, dass diese Auslastung sehr stark daher kommt, dass
die Anwendung auf Java basiert (wobei durch Optimierung eigentlich eine zu C++ annähernd performante Anwendung entstehen sollte).
Deswegen auch meine Vermutung eher möglichst viel nativen Code zu verwenden (zumindest wird auf der Excelsior Website auch davon gesprochen,
dass vieles Class-Laden zur Laufzeit bei einem AOT compilierten Programm dieser stark verlangsamen kann)
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn das eine Anwendung mit viel Netzwerk-Kommunikation ist, gibt es überhaupt Performance-Probleme oder verbringt die die meiste Zeit mit warten?
Wenn du sleep als Lösung ansprichst, scheint es eher so, als gibt es absolut kein Performance-Problem.


Der RAM-Verbrauch wird bei Programmen mit GC nahezu immer höher sein als ohne, und weniger RAM führt dabei meist zu mehr GC-Aktivität und damit schlechterer Performace. Das Task-Manager mehr RAM-Verbrauch als Profiler zeigen, ist normal, da sie andere Werte messen.


Alternative ist wie gesagt nativer Code, bei den bisher von dir genannten Informationen kann man da nicht viel anderes sagen.

Braucht es denn zu viel RAM und CPU oder willst du nur, dass es weniger ist?
In beiden Fällen: profilen und mit den gewonnenen Informationen optimieren. Ohne weitere Informationen ist das ein Schuss ins Blaue.
 

J90

Aktives Mitglied
Für mein Empfinden ist die Ram und zeitweise die CPU Belastung viel zu hoch, wenn ich sie mit anderer Software vergleiche. Habe nun aber vermutlich herausgefunden, wie ich jars, welche ich bisher zur laufzeit manuell geladen habe,
in eine AOT anwendung integrieren kann, sodass diese Werte auch in nativen Code verwandelt werden.
Excelsior bietet dafür keine GUI Oberfläche (und auch kein Tutorial), weswegen es mir bisher unbekannt war.
 

mrBrown

Super-Moderator
Mitarbeiter
Java-Anwendungen brauchen nahezu immer mehr RAM und CPU als native Programme, bedingt durch JIT und GC.


Hast du denn mal ein richtiges Profiling gemacht, und rausgefunden was viel CPU und RAM kostet,


Wie viel gewinnst du denn durch AOT, hast du das mal gemessen?
Und verglichen mit Hotspot, OpenJ9 und Graal? Mit unterschiedlichen GC-Konfigurationen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
P JavaFX Anwendung beendet sich selbst nur als Jar Allgemeine Java-Themen 40
OSchriever Externe Anwendung beenden Allgemeine Java-Themen 41
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
alderwaran Hoher Sys-Load bei Multithreaded Anwendung Allgemeine Java-Themen 8
S Anwendung die alle Abhaengigkeiten einer Library listet..? Allgemeine Java-Themen 5
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
D Anwendung öffnet hinter Taskleiste Allgemeine Java-Themen 7
I Anwendung auf Netzlaufwerk von mehreren Usern gleichzeitig nutzbar. Allgemeine Java-Themen 3
A Garbage Collector in NetBeans vs. exe Anwendung Allgemeine Java-Themen 33
D Java Anwendung mit dll File Allgemeine Java-Themen 5
B JAVA Prozesse in einer eigenen Anwendung laufen lassen Allgemeine Java-Themen 9
D RMI Einfache Chat-Anwendung mit RMI Allgemeine Java-Themen 0
J Jasper ireport - wieso beendet die Anwendung wenn ich die Preview schließe Allgemeine Java-Themen 1
Tort-E Datenmodell / Struktur der Anwendung Allgemeine Java-Themen 4
E Anwendung verhält sich unter Mac anders als Unter Windows. Allgemeine Java-Themen 4
S Anwendung zum ausrechnen der Differenz von zwei Tagen Allgemeine Java-Themen 9
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
L Stack overflow bei einer endrekursiven Funktion (Anwendung: Spezialform des Package Merge) Allgemeine Java-Themen 4
P Anwendung läuft nur mit JDK Allgemeine Java-Themen 2
D Java-Anwendung mit DB, GUI, etc. Allgemeine Java-Themen 3
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
F Unlimited Strength Policy. Frage Verbreitung der Anwendung Allgemeine Java-Themen 1
T Bot für Mql-Anwendung Allgemeine Java-Themen 10
F Java Anwendung Remote starten geht nicht Allgemeine Java-Themen 0
D neuen Prozess starten und anwendung beenden. Allgemeine Java-Themen 3
L Input/Output IO Anwendung Allgemeine Java-Themen 6
M Suche Framework/API für Monitoring-Anwendung Allgemeine Java-Themen 3
M Problem beim Starten der Anwendung Allgemeine Java-Themen 3
C Anwendung läuft nicht auf Mac OS X Allgemeine Java-Themen 2
M Java Anwendung ausführen Allgemeine Java-Themen 5
eskimo328 Swing Client Anwendung für MAC OS (Update Routine) Allgemeine Java-Themen 6
M Process wird gestoppt und nach beenden der Anwendung fortgeführt Allgemeine Java-Themen 4
J Interpreter-Fehler Anwendung startet nicht Allgemeine Java-Themen 5
W Framework für RichClient Anwendung? Allgemeine Java-Themen 4
D Mini Webserver für GUI Anwendung Allgemeine Java-Themen 5
Ollek MVC - Anwendung auf mein Projekt Allgemeine Java-Themen 18
U (Land-)Karten in Java Anwendung einbinden (GoogleMaps/OpenStreetMap) Allgemeine Java-Themen 7
S "Katalog"-Anwendung in Java eine gute Idee? Allgemeine Java-Themen 12
S Wie eine verteilte Anwendung in die Cloud? Allgemeine Java-Themen 4
E Anwendung nutzt plötzlich nicht mehr 100% CPU Allgemeine Java-Themen 2
R Geht das? JRE 1.4 global, 1.6.20 nur für eine Anwendung? Allgemeine Java-Themen 9
K Anwendung bringt JAVA Speicherfehler Allgemeine Java-Themen 11
C Java Anwendung nur einmalig starten Allgemeine Java-Themen 10
eskimo328 Offline/Online Web-Anwendung, Datensynchronisation etc. Allgemeine Java-Themen 9
E Anwendung starten Allgemeine Java-Themen 3
W Java Anwendung in HTML Allgemeine Java-Themen 2
DEvent Aktuelle Uhrzeit per Anwendung Allgemeine Java-Themen 4
C Idee für Anwendung/ Bücher Allgemeine Java-Themen 8
Y Anwendung starten(JAR) - Entscheidung Konsole oder Swing Allgemeine Java-Themen 5
P Java Anwendung mehr Speicher zur Verfügung stellen?? Allgemeine Java-Themen 3
C Kontextmenü erweitern und mit Java Anwendung verknüfen. Allgemeine Java-Themen 3
7 Problem mit webbasierter Anwendung Allgemeine Java-Themen 6
D Java Anwendung in der Shell Allgemeine Java-Themen 5
D Versuch Server - Client anwendung Allgemeine Java-Themen 9
T Welcher Server? JSP und Client-Anwendung Allgemeine Java-Themen 4
M Anwendung des MVC Konzepts Allgemeine Java-Themen 7
R Ausführbare Java Anwendung Allgemeine Java-Themen 27
A Java-Anwendung "richtig" schließen ohne JVM zu beenden Allgemeine Java-Themen 2
B In Anwendung jar file bauen Allgemeine Java-Themen 2
A Webspace für Grails-Anwendung Allgemeine Java-Themen 3
M WebStart Anwendung nicht dauerhaft Cachen Allgemeine Java-Themen 3
A An alle Cracks: Anwendung beenden mit ShutdownHook? Allgemeine Java-Themen 13
D Anwendung startet im Remote Desktop nicht Allgemeine Java-Themen 14
S Testen einer Anwendung durch klicken von Koordinaten Allgemeine Java-Themen 7
M SMS aus Desktop-Anwendung verschicken Allgemeine Java-Themen 8
G Unterschied Enterprise Anwendung und Web Anwendung Allgemeine Java-Themen 30
? Swing Anwendung aus Konsole starten Allgemeine Java-Themen 7
G Weboberfläche für Java Anwendung? Allgemeine Java-Themen 10
Y ProcessBuilder, Prozess wird gestartet, aber Anwendung nicht Allgemeine Java-Themen 5
S jar aus anwendung heraus ausführen Allgemeine Java-Themen 2
J Konsolen Anwendung mit while(true) Allgemeine Java-Themen 6
-MacNuke- Frage zu einer 3-Tier Anwendung Allgemeine Java-Themen 9
M Anwendung nur einmal starten / Zeichen in String zählen Allgemeine Java-Themen 7
F Hilfe beim Starten einer Java Anwendung unter Windows gesuch Allgemeine Java-Themen 8
L Java 1.5 - Anwendung unter 1.6 JRE sehr langsam geworden Allgemeine Java-Themen 8
B getResourceAsStream - standalone Anwendung vs. Web-Anwendung Allgemeine Java-Themen 2
J I18n einer existierenden Anwendung Allgemeine Java-Themen 2
C Java-Anwendung beenden Allgemeine Java-Themen 3
G Auslesen mit welcher Java-Version Anwendung kompiliert wurde Allgemeine Java-Themen 2
C Anwendung nur einmal Starten Allgemeine Java-Themen 11
Z Uralt-Applet in JFrame Anwendung konvertieren Allgemeine Java-Themen 12
J OpenOffice.org Events in eigene Anwendung umleiten Allgemeine Java-Themen 4
T Socket Server Anwendung - Empfang eines Byte-Arrays Allgemeine Java-Themen 7
G Datenbank-Anwendung schnell erstellen. Allgemeine Java-Themen 7
M Versionswechsel bei einer Web-Anwendung Allgemeine Java-Themen 5
A Client/Server-Anwendung Allgemeine Java-Themen 3
G java als anwendung? Allgemeine Java-Themen 11
N externe Anwendung aktivieren (nicht starten!) Allgemeine Java-Themen 3
L Speicherverbrauch einer Anwendung unter Windows Allgemeine Java-Themen 2
C Fehler bei der Anwendung von Transformen. Allgemeine Java-Themen 2
M 1. Probleme mit MouseListener, 2. Anwendung in Infobar Allgemeine Java-Themen 8
P Anwendung minimiert starten Allgemeine Java-Themen 11
G Java Anwendung für Multi-User Allgemeine Java-Themen 2
N Linux-Commands über Java Anwendung ausführen Allgemeine Java-Themen 12
E Anwendung ließt .ini-Datei nicht Allgemeine Java-Themen 3
M Java-Anwendung von CD-ROM Allgemeine Java-Themen 19
E externe Anwendung aufrufen und sich selbst beenden Allgemeine Java-Themen 8
M Datei auf Anwendung ziehen und starten Allgemeine Java-Themen 11
T unsatisfiedlinkerror -> Diese Anwendung konnte nicht gest Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben