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

Compactação de executáveis nativos com UPX

O Ultimate Packer for eXecutables (UPX) é uma ferramenta de compactação que reduz o tamanho dos executáveis. O Quarkus pode compactar o executável nativo produzido para reduzir seu tamanho. Essa compactação é interessante quando:

  • Criando ferramentas CLI, e se você pretende reduzir o espaço ocupado pelo disco,

  • construir pequenas imagens de containers.

Note que a compactação UPX:

  1. aumenta o tempo de build, principalmente se você utilizar níveis de compactação elevados

  2. aumenta a utilização do RSS de startup da aplicação

Sistema vs. Container

A compressão UPX requer:

  • o comando upx deve estar disponível no PATH;

  • an explicitly defined quarkus.native.compression.container-image;

  • ou ter construído o executável nativo usando uma compilação dentro de um container.

If quarkus.native.compression.container-image is not set explicitly, it will implicitly default to quarkus.native.builder-image.

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 compression image provides the upx command, Quarkus compresses the executable from inside the container.

If you want to force compression to take place in a container, you can set quarkus.native.compression.container-build to true (or false to explicitly not run compression in a container).

Se você não estiver em num destes casos, a compactação falha.

Setting quarkus.native.compression.container-image results in the compression to run in a container. If you want to set the variable, but not run the compression in a container, set quakrus.native.compression.container-build explicitly to false.

WORKDIR for the image used for compression

The executable to compress is mounted in directory /project. Since the container runs upx in the current working directory, the WORKDIR of the image used for compression must be /project.

Compression can be explicitly en-/disabled by setting quarkus.native.compression.enabled.

O upx é multiplataforma.

upx pode comprimir executáveis utilizando uma arquitetura e um sistema operacional diferentes dos da sua máquina anfitriã. Por exemplo, upx numa máquina macOS pode compactar um executável Linux de 64 bits.

Configuração da compactação UPX

Em seguida, na configuração da aplicação, ative a compactação, configurando o nível de compactação pretendido:

quarkus.native.compression.level=5

Se o nível de compactação não for definido, a compactação será desativada. A compactação ocorrerá quando o executável nativo for criado e substituirá o executável.

Nível de compactação

O nível de compactação vai de 1 a 10:

  • 1: compactação mais rápida

  • 9: melhor compactação

  • 10: melhor compactação (pode ser lenta para pastas grandes)

Parâmetros adicionais

Você pode passar parâmetros adicionais para o upx, como --brute ou --ultra-brute , usando o parâmetro quarkus.native.compression.additional-args . O valor é uma lista de argumentos separados por vírgula:

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

A lista exaustiva de parâmetros pode ser consultada na documentação UPX.

Conteúdo Relacionado