Compressing native executables using UPX

Ultimate Packer for eXecutables (UPX) 是一款压缩工具,可以减小可执行文件的体积。Quarkus 可以压缩生成的可执行应用程序,以减小其体积。当出现以下情况时,此类压缩非常有用:

  • 使用 CLI 工具,并且想要减少磁盘占用

  • building small container images.

请注意,UPX 压缩:

  1. 会增加构建时间,尤其是当您使用高压缩级别时

  2. 会增加应用程序的启动 RSS 使用情况

System vs. Container

UPX 压缩需要:

  • 系统中提供 upx 命令 PATH

  • 或使用容器内构建方式构建本机可执行文件。

如果您的路径中提供了 upx 命令,Quarkus 会使用它。否则,如果您使用容器内构建方式(使用 quarkus.native.container-build=true)构建本机镜像,并且构建镜像提供了 upx 命令,Quarkus 会从容器内部压缩可执行文件。

如果您不属于上述情况之一,则压缩会失败。

Example 1. upx is cross-platform.

upx 能够使用与您的主机不同架构和操作系统的可执行文件进行压缩。例如,macOS 机器上的 upx 能够压缩 Linux 64 位可执行文件。

Configuring the UPX compression

然后,在应用程序配置中,配置所需的 compression level 启用压缩:

quarkus.native.compression.level=5

如果未设置压缩级别,则停用压缩。压缩将在构建本机可执行文件后发生,并且会替换可执行文件。

Compression level

压缩级别范围为 1 到 10:

  • 1: faster compression

  • 9: better compression

  • 10:最优压缩(对于大文件可能较慢)

Extra parameters

您可以使用 --brute--ultra-brute 通过 quarkus.native.compression.additional-args 参数向 upx 传递其他参数。该值是逗号分隔的参数列表:

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

详尽的参数列表可在 the UPX documentation 中找到。