Hallo allemaal - dit is de vijfde post in onze serie over Quarkus! (Trouwens, kijk naar ons webinar . We zullen laten zien hoe je kunt beginnen „vanaf nul“ of bestaande oplossingen kunt migreren)

In we hebben de modernisering van Java-toepassingen met behulp van ondersteunde Quarkus-technologieën (CDI en Servlet 3) aan de hand van het helloworld-programma in de repository bekeken . Vandaag gaan we verder met het onderwerp modernisering en bespreken we het geheugenverbruik.
Prestatiemeting is de fundamentele basis voor bijna elke modernisering, en rapporten over geheugengebruik zijn een belangrijk onderdeel van het prestatie-analyseproces. Vandaag bekijken we de relevante meetinstrumenten waarmee de verbeteringen die het gevolg zijn van de modernisering van Java-toepassingen, kwantitatief kunnen worden beoordeeld.
Details over het meten van geheugengebruik zijn te vinden in de Quarkus-handleiding met de titel
Hieronder zullen we eenvoudig laten zien hoe we de gegevens over geheugengebruik van drie verschillende soorten toepassingen (JBoss EAP, JAR-pakket en uitvoerbaar bestand) kunnen vergelijken, door deze gegevens in Linux te verzamelen met behulp van de pmap- en ps-tools.
JBoss EAP
We starten een exemplaar van de JBoss EAP-toepassing (zie de sectie 'Deploying helloworld' in ) en bekijken vervolgens zijn proces-id PID (in ons voorbeeld is dit 7268) met behulp van de volgende opdracht:
$ pgrep -lf jboss
7268 java
Note. De optie -a stelt ons in staat de volledige opdrachtregel te extraheren (dat wil zeggen: $ pgrep -af jboss).
We gebruiken nu PID 7268 in de opdrachten ps en pmap.
Zo:
$ 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
En zo:
$ 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
Address Kbytes RSS Dirty Mode 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 ]
---------------- ------- ------- -------
total kB 3263224 672772 643024
We look at the RSS value and see that JBoss EAP consumes about 650 MB of memory.
JAR-package
We run the JAR application (see the section 'Running helloworld packed in JAR' in ):
$ java -jar ./target/helloworld--runner.jar
Again, we check the PID using the pgrep command (this time we use the aforementioned -a option):
$ pgrep -af helloworld
6408 java -jar ./target/helloworld--runner.jar
We run ps and pmap to measure memory usage, but now for process 6408.
Zo:
$ ps -o pid,rss,command -p 6408
PID RSS COMMAND
6408 125732 java -jar ./target/helloworld-quarkus-runner.jar
En zo:
$ pmap -x 6408
6408: java -jar ./target/helloworld-quarkus-runner.jar
Address Kbytes RSS Dirty Mode 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 ]
---------------- ------- ------- -------
total kB 12421844 133784 115692
Again we check the RSS and see that the JAR package consumes about 130 MB.
Executable file
We run the native binary (see the section 'Running the native executable helloworld' in ):
$ ./target/helloworld--runner
Again, we check its PID:
$ pgrep -af helloworld
6948 ./target/helloworld--runner
And then we use the obtained process identifier (6948) in the ps and pmap commands.
Zo:
$ ps -o pid,rss,command -p 6948
PID RSS COMMAND
6948 19084 ./target/helloworld-quarkus-runner
And like this:
$ pmap -x 6948
6948: ./target/helloworld-quarkus-runner
Address Kbytes RSS Dirty Mode Mapping
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 ]
---------------- ------- ------- -------
total kB 1456800 20592 2684
We look at the RSS and see that the executable file occupies about 20 MB of memory.
Comparing memory consumption
Thus, we obtained the following figures on memory usage:
- JBoss EAP – 650 MB.
- JAR package – 130 MB.
- Executable file – 20 MB.
It is evident that the executable file consumes much less memory.
Summarizing posts 4 and 5
In deze en de vorige post hebben we de vraag behandeld van het moderniseren van Java-applicaties met behulp van de ondersteunde Quarkus-technologieën (CDI en Servlet 3), evenals verschillende manieren van ontwikkeling, opbouw en uitvoering van dergelijke applicaties. We hebben laten zien hoe je gegevens over geheugengebruik kunt verzamelen om de verbeteringen te beoordelen die zijn bereikt als gevolg van deze modernisering. Deze artikelen helpen om te begrijpen hoe Quarkus werkt en wat de voordelen zijn - ongeacht of het gaat om de eenvoudigste helloworld-app uit onze voorbeelden of veel complexere applicaties uit de echte wereld.
We komen over twee weken terug met de afsluitende post over Quarkus - tot ziens!
In onze afsluitende post zullen we tonen hoe je AMQ Online en Quarkus kunt combineren om een modern berichtensysteem op basis van OpenShift te bouwen, met behulp van twee nieuwe technologieën die verband houden met berichtverwerking. Lees verder op .
Bron: habr.com
