¡Hola a todos! Este es el quinto post de nuestra serie sobre Quarkus. (Por cierto, vean nuestro webinar . Mostraremos cómo comenzar «desde cero» o migrar soluciones existentes)

En hemos revisado la modernización de aplicaciones Java utilizando tecnologías soportadas por Quarkus (CDI y Servlet 3) con el ejemplo del programa helloworld del repositorio . Hoy continuaremos el tema de modernización y discutiremos sobre el consumo de memoria.
La medición del rendimiento es fundamental en prácticamente cualquier modernización, y los informes sobre uso de memoria son una parte importante del análisis del rendimiento. Hoy revisaremos las herramientas de medición correspondientes, que permiten evaluar cuantitativamente las mejoras logradas como resultado de la modernización de aplicaciones Java.
Se pueden encontrar más detalles sobre la medición del uso de memoria en la guía de Quarkus titulada
Y a continuación simplemente mostraremos cómo comparar los datos de uso de memoria de tres tipos diferentes de aplicaciones (JBoss EAP, paquete JAR y archivo ejecutable), recolectando esos datos en Linux usando las utilidades pmap y ps.
JBoss EAP
Iniciamos una instancia de la aplicación JBoss EAP (vea la sección «Desplegando helloworld» en ) y luego consultamos su identificador de proceso PID (en nuestro ejemplo es 7268) utilizando el siguiente comando:
$ pgrep -lf jboss
7268 java
Nota. La opción -a permite extraer la línea de comandos completa (es decir: $ pgrep -af jboss).
Ahora utilizamos el PID 7268 en los comandos ps y pmap.
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
Y 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
Dirección Kbytes RSS Sucio Modo Mapeo
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 el valor de RSS y vemos que JBoss EAP consume aproximadamente 650 MB de memoria.
Paquete JAR
Iniciamos la aplicación JAR (ver sección «Iniciando helloworld empaquetado en JAR» en ):
$ java -jar ./target/helloworld--runner.jar
Nuevamente consultamos el PID con el comando pgrep (esta vez usamos la opción -a mencionada anteriormente):
$ pgrep -af helloworld
6408 java -jar ./target/helloworld--runner.jar
Ejecutamos ps y pmap para medir el uso de memoria, pero ahora para el proceso 6408.
Así:
$ ps -o pid,rss,command -p 6408
PID RSS COMANDO
6408 125732 java -jar ./target/helloworld-quarkus-runner.jar
Y así:
$ pmap -x 6408
6408: java -jar ./target/helloworld-quarkus-runner.jar
Dirección Kbytes RSS Sucio Modo Mapeo
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
Nuevamente observamos el RSS y vemos que el paquete JAR consume aproximadamente 130 MB.
Archivo ejecutable
Iniciamos el nativo (ver sección «Iniciando el archivo ejecutable nativo helloworld» en ):
$ ./target/helloworld--runner
Volvemos a consultar su PID:
$ pgrep -af helloworld
6948 ./target/helloworld--runner
Y luego usamos el identificador de proceso obtenido (6948) en los comandos ps y pmap.
Así:
$ ps -o pid,rss,command -p 6948
PID RSS COMMAND
6948 19084 .\/target\/helloworld-quarkus-runner
Y así:
$ pmap -x 6948
6948: .\/target\/helloworld-quarkus-runner
Dirección Kbytes RSS Dirty Modo Mapeo
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
Vemos RSS y observamos que el archivo ejecutable ocupa alrededor de 20 MB de memoria.
Comparamos el consumo de memoria
Entonces, hemos obtenido las siguientes cifras sobre el uso de memoria:
- JBoss EAP – 650 MB.
- Paquete JAR – 130 MB.
- Archivo ejecutable – 20 MB.
Es evidente que el archivo ejecutable ocupa mucho menos memoria.
Resumiendo las publicaciones 4 y 5
En esta y la publicación anterior, hemos considerado la cuestión de la modernización de aplicaciones Java utilizando tecnologías compatibles de Quarkus (CDI y Servlet 3), así como diversas formas de desarrollar, compilar y ejecutar tales aplicaciones. Hemos mostrado cómo realizar la recopilación de datos sobre el uso de memoria para evaluar las mejoras logradas como resultado de dicha modernización. Estos artículos ayudan a entender cómo funciona Quarkus y cuál es su utilidad, ya sea en la simple aplicación helloworld de nuestros ejemplos o en aplicaciones mucho más complejas de la vida real.
Regresaremos en dos semanas con la publicación final sobre Quarkus – ¡hasta entonces!
En nuestra publicación final, mostraremos cómo combinar AMQ Online y Quarkus para construir un sistema moderno de mensajería basado en OpenShift utilizando dos nuevas tecnologías relacionadas con el procesamiento de mensajes. Lea más en .
Fuente: habr.com
