Quarkus: modernisering van applicaties aan de hand van de helloworld uit JBoss EAP Quickstart (vervolg)

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

Quarkus: modernisering van applicaties aan de hand van de helloworld uit JBoss EAP Quickstart (vervolg)

In de vorige post 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 Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart. 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 Measuring Performance—How do we measure memory usage?

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 de vorige post) 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 de vorige post):

$ 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 de vorige post):

$ ./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 de link.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster