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
upx
deve 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 quakrus.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.