Ola a todos: esta é a quinta publicación da nosa serie Quarkus! (Por certo, mira o noso webinar
В
A medición do rendemento é a base fundamental de case calquera actualización, e os informes de uso da memoria son unha parte importante do proceso de análise de rendemento. Hoxe veremos as ferramentas de medición relevantes que se poden utilizar para cuantificar as melloras conseguidas coa modernización das aplicacións Java.
Para obter máis información sobre como medir o uso da memoria, consulte o tutorial de Quarkus
A continuación, mostrarémosche como comparar os datos de uso da memoria para tres tipos diferentes de aplicacións (JBoss EAP, paquete JAR e executable) recollendo os datos en Linux mediante as utilidades pmap e ps.
JBoss EAP
Lanzamos unha instancia da aplicación JBoss EAP (consulte a sección "Implementación de helloworld" en
$ pgrep -lf jboss
7268 java
Nota. A opción –a permítelle extraer a liña de comandos completa (por exemplo: $ pgrep -af jboss).
Agora usamos PID 7268 nos comandos ps e pmap.
Aquí así:
$ 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
E así:
$ 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
Observamos o valor RSS e vemos que JBoss EAP consome aproximadamente 650 MB de memoria.
Paquete JAR
Lanzamos a aplicación JAR (consulte a sección "Executar helloworld empaquetado en JAR" en
$ java -jar ./target/helloworld-<version>-runner.jar
De novo miramos o PID usando o comando pgrep (esta vez usamos a opción -a descrita anteriormente):
$ pgrep -af helloworld
6408 java -jar ./target/helloworld-<version>-runner.jar
Executamos ps e pmap para medir o uso da memoria, pero agora para o proceso 6408.
Aquí así:
$ ps -o pid,rss,command -p 6408
PID RSS COMMAND
6408 125732 java -jar ./target/helloworld-quarkus-runner.jar
E así:
$ 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
Miramos de novo o RSS e vemos que o paquete JAR consome aproximadamente 130 MB.
Arquivo executable
Lanzamos o nativo (consulte a sección "Executar o ficheiro executable nativo de helloworld" en
$ ./target/helloworld-<version>-runner
Vexamos de novo o seu PID:
$ pgrep -af helloworld
6948 ./target/helloworld-<version>-runner
E despois usamos o ID de proceso resultante (6948) nos comandos ps e pmap.
Aquí así:
$ ps -o pid,rss,command -p 6948
PID RSS COMMAND
6948 19084 ./target/helloworld-quarkus-runner
И вот так:
$ 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
Observamos o RSS e vemos que o ficheiro executable ocupa uns 20 MB de memoria.
Comparando o consumo de memoria
Entón, obtivemos os seguintes números para o uso da memoria:
- JBoss EAP - 650 MB.
- Paquete JAR: 130 MB.
- Ficheiro executable - 20 MB.
Obviamente, o ficheiro executable ocupa moita menos memoria.
Imos resumir as publicacións 4 e 5
Nesta publicación e nas anteriores, analizamos a modernización de aplicacións Java utilizando tecnoloxías compatibles con Quarkus (CDI e Servlet 3), así como varias formas de desenvolver, construír e executar tales aplicacións. Amosamos como recoller datos de uso da memoria para avaliar as melloras conseguidas por tal actualización. Estes artigos axúdanche a comprender como funciona Quarkus e por que é útil, tanto se estás falando do sinxelo programa helloworld dos nosos exemplos como de aplicacións da vida real moito máis complexas.
Volveremos dentro de dúas semanas cunha publicación final sobre Quarkus. Vémonos alí!
Na nosa publicación final, mostraremos como combinar AMQ Online e Quarkus para construír un moderno sistema de mensaxería baseado en OpenShift utilizando dúas novas tecnoloxías de mensaxería. Sigue lendo
Fonte: www.habr.com