Hallo zusammen â hier ist der fĂŒnfte Beitrag unserer Reihe ĂŒber Quarkus! (Ăbrigens, schaut euch unser Webinar an . Wir zeigen, wie man âvon Grund aufâ startet oder bestehende Lösungen ĂŒbertrĂ€gt)

Im haben wir die Modernisierung von Java-Anwendungen mithilfe der von Quarkus unterstĂŒtzten Technologien (CDI und Servlet 3) am Beispiel des helloworld-Programms aus dem Repository . Heute setzen wir das Thema Modernisierung fort und diskutieren die Frage des Speicherverbrauchs.
Die Messung der Leistung ist eine grundlegende Voraussetzung fĂŒr nahezu jede Modernisierung, und Berichte ĂŒber den Speicherverbrauch sind ein wichtiger Teil des Leistungsanalysprozesses. Heute werden wir die entsprechenden Messwerkzeuge betrachten, mit denen man die Verbesserungen, die durch die Modernisierung von Java-Anwendungen erzielt wurden, quantitativ bewerten kann.
Details zur Messung des Speicherverbrauchs finden Sie im Quarkus-Handbuch mit dem Titel
Im Folgenden zeigen wir einfach, wie man die Daten zum Speicherverbrauch von drei verschiedenen Anwendungsarten (JBoss EAP, JAR-Paket und ausfĂŒhrbare Datei) vergleicht, indem wir diese Daten in Linux mit den Tools pmap und ps sammeln.
JBoss EAP
Wir starten eine Instanz der Anwendung JBoss EAP (siehe Abschnitt "Hochladen von helloworld" in ) und sehen uns dann die Prozess-ID PID (in unserem Beispiel ist dies 7268) mit dem folgenden Befehl an:
$ pgrep -lf jboss
7268 java
Hinweis. Die Option âa ermöglicht es, die vollstĂ€ndige Befehlszeile abzurufen (d.h.: $ pgrep -af jboss).
Jetzt verwenden wir die PID 7268 in den Befehlen ps und pmap.
So:
$ ps -o pid,rss,command -p 7268
PID RSS COMMAND
7268 665348 java -D[Standalone] -server -verbose:gc -Xloggc:/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferI
Und so geht's:
$ pmap -x 7268
7268: java -D[Standalone] -server -verbose:gc -Xloggc:/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standa
Adresse Kbytes RSS Dirty Modus Mapping
00000000ae800000 1348608 435704 435704 rw--- [ anon ]
0000000100d00000 1035264 0 0 ----- [ anon ]
000055e4d2c2f000 4 4 0 r---- java
000055e4d2c30000 4 4 0 r-x-- java
000055e4d2c31000 4 0 0 r---- java
000055e4d2c32000 4 4 4 r---- java
000055e4d2c33000 4 4 4 rw--- java
[...]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------- ------- -------
Gesamt kB 3263224 672772 643024
Wir sehen den RSS-Wert und stellen fest, dass JBoss EAP ungefÀhr 650 MB Arbeitsspeicher benötigt.
JAR-Paket
Wir starten die JAR-Anwendung (siehe Abschnitt âWir starten helloworld, verpackt in JARâ in ):
$ java -jar ./target/helloworld-<version>-runner.jar
Wieder prĂŒfen wir die PID mit dem Befehl pgrep (diesmal verwenden wir die oben beschriebene Option -a):
$ pgrep -af helloworld
6408 java -jar ./target/helloworld-<version>-runner.jar
Wir starten ps und pmap, um den Speicherverbrauch zu messen, aber jetzt fĂŒr den Prozess 6408.
So:
$ ps -o pid,rss,command -p 6408
PID RSS BEFEHL
6408 125732 java -jar ./target/helloworld-quarkus-runner.jar
Und so geht's:
$ pmap -x 6408
6408: java -jar ./target/helloworld-quarkus-runner.jar
Adresse Kbytes RSS Dirty Modus Mapping
00000005d3200000 337408 0 0 rw--- [ anon ]
00000005e7b80000 5046272 0 0 ----- [ anon ]
000000071bb80000 168448 57576 57576 rw--- [ anon ]
0000000726000000 2523136 0 0 ----- [ anon ]
00000007c0000000 2176 2088 2088 rw--- [ anon ]
00000007c0220000 1046400 0 0 ----- [ anon ]
00005645b85d6000 4 4 0 r---- java
00005645b85d7000 4 4 0 r-x-- java
00005645b85d8000 4 0 0 r---- java
00005645b85d9000 4 4 4 r---- java
00005645b85da000 4 4 4 rw--- java
[...]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------- ------- -------
Gesamt kB 12421844 133784 115692
Wieder sehen wir den RSS und stellen fest, dass das JAR-Paket ungefÀhr 130 MB benötigt.
AusfĂŒhrbare Datei
Wir starten den nativen Code (siehe Abschnitt âWir starten die native ausfĂŒhrbare Datei helloworldâ in ):
$ ./target/helloworld-<version>-runner
Wieder sehen wir seine PID:
$ pgrep -af helloworld
6948 ./target/helloworld-<version>-runner
Und dann verwenden wir die erhaltene Prozess-ID (6948) in den Befehlen ps und pmap.
So:
$ ps -o pid,rss,command -p 6948
PID RSS COMMAND
6948 19084 .\/target\/helloworld-quarkus-runner
Und so:
$ pmap -x 6948
6948: .\/target\/helloworld-quarkus-runner
Adresse Kbytes RSS Dirty Modus Abbildung
0000000000400000 12 12 0 r---- helloworld-quarkus-runner
0000000000403000 10736 8368 0 r-x-- helloworld-quarkus-runner
0000000000e7f000 7812 6144 0 r---- helloworld-quarkus-runner
0000000001620000 2024 1448 308 rw--- helloworld-quarkus-runner
000000000181a000 4 4 4 r---- helloworld-quarkus-runner
000000000181b000 16 16 12 rw--- helloworld-quarkus-runner
0000000001e10000 1740 156 156 rw--- [ anon ]
[...]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------- ------- -------
gesamt kB 1456800 20592 2684
Wir schauen uns den RSS-Wert an und sehen, dass die ausfĂŒhrbare Datei etwa 20 MB Speicher benötigt.
Wir vergleichen den Speicherverbrauch
So, wir haben die folgenden Zahlen zur Speichernutzung erhalten:
- JBoss EAP â 650 MB.
- JAR-Paket â 130 MB.
- AusfĂŒhrbare Datei â 20 MB.
Offensichtlich benötigt die ausfĂŒhrbare Datei viel weniger Speicher.
Fassen wir die Postings 4 und 5 zusammen
In diesem und dem vorherigen Beitrag haben wir das Thema der Modernisierung von Java-Anwendungen mit den in Quarkus unterstĂŒtzten Technologien (CDI und Servlet 3) sowie verschiedene AnsĂ€tze zur Entwicklung, zum Bauen und zum AusfĂŒhren solcher Anwendungen behandelt. Wir haben gezeigt, wie man Daten zur Speichernutzung sammelt, um die Verbesserungen zu bewerten, die durch diese Modernisierung erreicht wurden. Diese Artikel helfen, zu verstehen, wie Quarkus funktioniert und welchen Nutzen es bringt â unabhĂ€ngig davon, ob es sich um unser einfaches helloworld-Programm aus den Beispielen oder um viel komplexere Anwendungen aus der realen Welt handelt.
Wir kommen in zwei Wochen mit dem letzten Beitrag ĂŒber Quarkus zurĂŒck â bis bald!
In unserem abschlieĂenden Beitrag zeigen wir, wie man AMQ Online und Quarkus kombiniert, um ein modernes Messaging-System auf der Basis von OpenShift mit zwei neuen Technologien zur Nachrichtenverarbeitung zu erstellen. Lesen Sie weiter bei .
Quelle: habr.com
