Salut tuturor – acesta este al cincilea post din seria noastră despre Quarkus! (Apropo, vizionați webinarul nostru . Vă vom arăta cum să începeți „de la zero” sau să migrați soluții deja existente)

În am discutat despre modernizarea aplicațiilor Java folosind tehnologiile Quarkus suportate (CDI și Servlet 3) pe baza programului helloworld din repository . Astăzi vom continua tema modernizării și vom discuta despre consumul de memorie.
Măsurarea performanței este fundamentul aproape oricărei modernizări, iar rapoartele de utilizare a memoriei sunt o parte esențială a procesului de analiză a performanței. Astăzi vom explora instrumentele de măsurare relevante, care permit evaluarea cantitativă a îmbunătățirilor obținute prin modernizarea aplicațiilor Java.
Detalii despre măsurarea utilizării memoriei pot fi găsite în ghidul Quarkus intitulat
Mai jos, vom arăta pur și simplu cum să comparăm datele privind utilizarea memoriei pentru trei tipuri diferite de aplicații (JBoss EAP, pachet JAR și executabil), colectând aceste date în Linux cu ajutorul utilitarilor pmap și ps.
JBoss EAP
Lansăm un exemplar al aplicației JBoss EAP (vezi secțiunea „Desfășurăm helloworld” în ) și apoi ne uităm la identificatorul său de proces PID (în exemplul nostru acesta este 7268) folosind următoarea comandă:
$ pgrep -lf jboss
7268 java
Notă. Opțiunea –a permite extragerea liniei complete de comandă (adică: $ pgrep -af jboss).
Acum folosim PID 7268 în comenzile ps și pmap.
Așa:
$ 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
Și așa:
$ 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
Privindem valoarea RSS și vedem că JBoss EAP consumă aproximativ 650 MB de memorie.
Pachet JAR
Lansăm aplicația JAR (vezi secțiunea „Lansăm helloworld, ambalat în JAR” din ):
$ java -jar .\/target\/helloworld-<version>-runner.jar
Din nou, verificăm PID-ul folosind comanda pgrep (de data aceasta folosim opțiunea descrisă mai sus -a):
$ pgrep -af helloworld
6408 java -jar .\/target\/helloworld-<version>-runner.jar
Lansăm ps și pmap pentru a măsura utilizarea memoriei, dar acum pentru procesul 6408.
Așa:
$ ps -o pid,rss,command -p 6408
PID RSS COMANDĂ
6408 125732 java -jar .\/target\/helloworld-quarkus-runner.jar
Și așa:
$ pmap -x 6408
6408: java -jar .\/target\/helloworld-quarkus-runner.jar
Adresa Kbytes RSS Dirty Modul Mapare
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
Din nou, verificăm RSS și vedem că pachetul JAR consumă aproximativ 130 MB.
Fișier executabil
Lansăm nativul (vezi secțiunea „Lansăm fișierul executabil nativ helloworld” din ):
$ .\/target\/helloworld-<version>-runner
Din nou, verificăm PID-ul său:
$ pgrep -af helloworld
6948 .\/target\/helloworld-<version>-runner
Și apoi folosim identificatorul de proces obținut (6948) în comenzile ps și pmap.
Așa:
$ ps -o pid,rss,command -p 6948
PID RSS COMANDĂ
6948 19084 .\/target\/helloworld-quarkus-runner
Și așa:
$ pmap -x 6948
6948: .\/target\/helloworld-quarkus-runner
Adresa Kbytes RSS Dirty Modul Mapare
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
Privindem RSS și vedem că fișierul executabil ocupă aproximativ 20 MB de memorie.
Comparăm consumul de memorie
Așadar, am obținut următoarele cifre pentru utilizarea memoriei:
- JBoss EAP – 650 MB.
- Pachet JAR – 130 MB.
- Fișier executabil – 20 MB.
Este evident că fișierul executabil folosește mult mai puțină memorie.
Facem un rezumat al postărilor 4 și 5
În această postare și în cea anterioară, am analizat problema modernizării aplicațiilor Java utilizând tehnologiile suportate de Quarkus (CDI și Servlet 3), precum și diferitele modalități de dezvoltare, construire și lansare a acestor aplicații. Am arătat cum să colectăm date privind utilizarea memoriei pentru a evalua îmbunătățirile obținute în urma acestei modernizări. Aceste articole ajută la înțelegerea modului în care funcționează Quarkus și care sunt beneficiile sale – indiferent dacă este vorba despre cea mai simplă aplicație helloworld din exemplele noastre sau despre aplicații mult mai complexe din viața reală.
Ne vom întoarce peste două săptămâni cu postarea finală despre Quarkus – până atunci, rămâneți cu bine!
În postarea noastră finală, vom arăta cum să combinăm AMQ Online și Quarkus pentru a construi un sistem modern de schimb de mesaje pe baza OpenShift, folosind două noi tehnologii legate de procesarea mesajelor. Citiți mai multe despre .
Sursa: habr.com
