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

I 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 . 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
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 ) 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 ):
$ 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 ):
$ ./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å .
Kilde: habr.com
