The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Compresión de ejecutables nativos con UPX

Ultimate Packer for eXecutables (UPX) is a compression tool reducing the size of executables. Quarkus can compress the produced native executable to reduce its size. Such compression is interesting when:

  • construir herramientas CLI, y quiere reducir la huella del disco,

  • construir imágenes de contenedores pequeños.

Tenga en cuenta que la compresión UPX:

  1. aumenta el tiempo de construcción, sobre todo si se utilizan niveles de compresión elevados

  2. aumenta el uso de RSS de inicio de la aplicación

Sistema vs. Contenedor

La compresión UPX requiere:

  • el comando upx para que esté disponible en el sistema PATH;

  • o haber construido el ejecutable nativo utilizando una construcción en el contenedor.

If you have the upx command available on your path, Quarkus uses it. Otherwise, if you built the native image using an in-container build (using quarkus.native.container-build=true) and if the builder image provides the upx command, Quarkus compresses the executable from inside the container.

Si no está en uno de estos casos, la compresión falla.

upx es multiplataforma.

upx puede comprimir ejecutables que utilicen una arquitectura y un sistema operativo diferentes a los de su máquina anfitriona. Por ejemplo, upx en una máquina MacOS X puede comprimir los ejecutables de Linux 64bits.

Configuración de la compresión UPX

A continuación, en la configuración de su aplicación, active la compresión configurando el nivel de compresión que desee:

quarkus.native.compression.level=5

If the compression level is not set, the compression is disabled. The compression will happen once the native executable is built and will replace the executable.

Nivel de compresión

El nivel de compresión va de 1 a 10:

  • 1: compresión más rápida

  • 9: mejor compresión

  • `10`Mejor compresión (puede ser lenta para archivos grandes)

Parámetros adicionales

You can pass extra parameter to upx, such as --brute or --ultra-brute using the quarkus.native.compression.additional-args parameter. The value is a comma-separated list of arguments:

quarkus.native.compression.level=3
quarkus.native.compression.additional-args=--ultra-brute,-v

La lista completa de parámetros se encuentra en la documentación de UPX.