Quarkus: modernisering af applikationer med eksemplet helloworld fra JBoss EAP Quickstart (fortsættelse)

Hej alle – her er det femte indlæg i vores serie om Quarkus! (For øvrigt, se vores webinar «Dette er Quarkus – et Kubernetes-native Java-framework». Vi vil vise, hvordan man kommer i gang «fra bunden» eller migrerer eksisterende løsninger)

Quarkus: modernisering af applikationer med eksemplet helloworld fra JBoss EAP Quickstart (fortsættelse)

I i det tidligere indlæg vi har set på modernisering af Java-applikationer ved hjælp af de understøttede Quarkus-teknologier (CDI og Servlet 3) ved eksempelprogrammet helloworld fra repositoryet Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart. I dag fortsætter vi med emnet modernisering og diskuterer spørgsmålet om hukommelsesforbrug.

Måling af ydeevne er en grundlæggende basis for næsten enhver modernisering, og rapporter om hukommelsesforbrug er en vigtig del af ydeevneanalysen. I dag vil vi se på de relevante måleværktøjer, som kan kvantificere forbedringerne opnået som følge af modernisering af Java-applikationer.

For detaljer om måling af hukommelsesbrug kan du læse Quarkus-guiden med titlen Measuring Performance—How do we measure memory usage?

Og herunder viser vi, hvordan man sammenligner data om hukommelsesforbrug mellem tre forskellige typer applikationer (JBoss EAP, JAR-pakke og eksekverbar fil) ved at indsamle disse data i Linux ved hjælp af værktøjerne pmap og ps.

JBoss EAP

Vi starter en instans af JBoss EAP-programmet (se afsnittet "Udrulning af helloworld" i i det tidligere indlæg) og ser derefter dets proces-id PID (i vores eksempel er det 7268) ved hjælp af følgende kommando:

$ pgrep -lf jboss
7268 java

Bemærkning. Muligheden –a gør det muligt at udtrække den fulde kommandolinje (dvs.: $ pgrep -af jboss).

Nu bruger vi PID 7268 i kommandoerne ps og pmap.

Sådan her:

$ 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

Og sådan her:

$ 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

Vi ser RSS-værdien og bemærker, at JBoss EAP bruger cirka 650 MB hukommelse.

JAR-pakke

Vi kører JAR-applikationen (se afsnittet "Køre helloworld pakket i JAR" i i det tidligere indlæg):

$ java -jar ./target/helloworld-<version>-runner.jar

Vi ser igen PID ved hjælp af kommandoen pgrep (denne gang bruger vi den tidligere nævnte -a mulighed):

$ pgrep -af helloworld
6408 java -jar ./target/helloworld-<version>-runner.jar

Vi kører ps og pmap for at måle hukommelsesforbruget, men nu for processen 6408.

Sådan her:

$ ps -o pid,rss,command -p 6408
  PID   RSS COMMAND
 6408 125732 java -jar ./target/helloworld-quarkus-runner.jar

Og sådan her:

$ 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

Vi ser igen RSS og bemærker, at JAR-pakken bruger cirka 130 MB.

Kørselfil

Vi kører den native applikation (se afsnittet "Køre den native eksekverbare fil helloworld" i i det tidligere indlæg):

$ ./target/helloworld-<version>-runner

Vi ser igen dens PID:

$ pgrep -af helloworld
6948 ./target/helloworld-<version>-runner

Og så bruger vi det opnåede proces-id (6948) i kommandoerne ps og pmap.

Sådan her:

$ ps -o pid,rss,command -p 6948
  PID   RSS COMMAND
 6948 19084 ./target/helloworld-quarkus-runner
Og sådan:
$ 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

Vi ser RSS og bemærker, at eksekveringsfilen bruger omkring 20 MB hukommelse.

Sammenligner hukommelsesforbruget

Så vi fik følgende tal for hukommelsesforbruget:

  • JBoss EAP – 650 MB.
  • JAR-pakke – 130 MB.
  • Kørselfil – 20 MB.

Det er tydeligt, at eksekveringsfilen bruger betydeligt mindre hukommelse.

Lad os opsummere indlæg 4 og 5

I dette og i det foregående indlæg har vi set på spørgsmålet om modernisering af Java-applikationer ved hjælp af de teknologier, der understøttes i Quarkus (CDI og Servlet 3), samt forskellige metoder til udvikling, bygning og lancering af sådanne applikationer. Vi har vist, hvordan man indsamler data om hukommelsesforbrug for at vurdere forbedringer, der er opnået som følge af denne modernisering. Disse artikler hjælper med at forstå, hvordan Quarkus fungerer, og hvad dets fordele er – uanset om det drejer sig om det simpleste helloworld-program fra vores eksempler eller om langt mere komplekse applikationer fra virkeligheden.

Vi vender tilbage om to uger med det afsluttende indlæg om Quarkus – vi ses!

I vores afsluttende indlæg viser vi, hvordan man integrerer AMQ Online og Quarkus for at bygge et moderne beskedsystem baseret på OpenShift ved hjælp af to nye teknologier relateret til beskedbehandling. Læs mere på linket.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster