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
; -
ou ter construído o executável nativo usando uma compilação dentro de um container.
Se você tiver o comando upx
disponível seu path, o Quarkus o utilizará. Caso contrário, se você construiu a imagem nativa usando uma construção no container (usando quarkus.native.container-build=true
) e se a imagem do builder fornecer o comando upx
, o Quarkus comprime o executável de dentro do container.
Se você não estiver em num destes casos, a compactação falha.
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.