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:
-
aumenta o tempo de build, principalmente se você utilizar níveis de compactação elevados
-
aumenta a utilização do RSS de startup da aplicação
Sistema vs. Container
A compressão UPX requer:
-
o comando
upxdeve estar disponível noPATH; -
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 quarkus.native.compression.container-build explicitly to false.
WORKDIR for the image used for compressionThe executable to compress is mounted in directory |
Compression can be explicitly en-/disabled by setting quarkus.native.compression.enabled.
|
O upx é multiplataforma.
|
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.