适用于 Java 的 Azure 命令启动器(jaz)是一个轻型实用工具,可简化开发人员在Azure上运行其应用程序的Java方式。
通过智能地应用为云环境定制的Java虚拟机(JVM)选项,该工具可减少配置开销,并现成地提高资源利用率,并具有更高的性能潜力。
此工具非常适合以下开发人员:
- 想要更好的 JVM 默认值,而无需深入探讨优化指南。
- 使用 Spring Boot、Quarkus 或 Micronaut 等框架开发和部署云本机微服务。
- 首选基于容器的工作流,例如 Kubernetes 和 OpenShift。
- 在Azure 容器应用、Azure Kubernetes 服务、Azure Red Hat OpenShift或Azure 虚拟机上部署Java工作负荷。
主要功能
- 🛠 自动优化调整用于云原生部署的 JVM 参数。
-
🚀 即插即用体验。 只需放入 Dockerfile 或启动脚本,即可将
java命令替换为jaz。 - ☁️ 针对Azure环境进行优化。
- 🔧 可通过环境变量进行自定义。 可通过多种方式安全地推出配置更改。
支持的环境
在 Linux 环境中,只要 Java 启动器可用,就可以使用 Azure 命令启动器适用于 Java。 它已通过以下Azure和 CI/CD 平台进行验证和测试:
- Azure Kubernetes 服务 (AKS)
- Azure 容器应用
- Azure 应用服务
- Azure Functions
- Azure Red Hat OpenShift (ARO)
- Azure 虚拟机
- Azure DevOps
- GitHub Codespaces
- GitHub Actions
公共预览
Java的 Azure 命令启动器现在以公共预览版提供! 阅读 公共预览版公告 ,了解此工具及其优势。
工作原理
用于Java的 Azure 命令启动器位于容器或虚拟机启动命令与 JVM 之间。 启动该工具时,它会:
- 检测云环境(例如容器限制和可用内存)。
- 分析工作负荷类型并选择最适合 JVM 优化标志,例如:
- 堆大小设定。
- 垃圾回收器选择和调优。
- 根据需要配置日志记录和诊断设置。
- 启动Java进程,向其传递优化标志和任何用户提供的参数。
- 隐式地中继 stdout、stderr、stdin 以及操作系统信号到和从 Java 进程。
- 监视Java进程并在终止时中继其退出代码。
示例用法
用于 Java 的 Azure 命令启动器是 java 命令的直接替代品,无需更改代码。 只需在启动脚本中替换为 javajaz ,例如替换为 java -jar foo.jarjaz -jar foo.jar。
而不是手动优化 JVM 选项:
JAVA_OPTS="-XX:... several JVM tuning flags"
java $JAVA_OPTS -jar myapp.jar
使用 jaz:
jaz -jar myapp.jar
应用程序可能会从以下项中自动受益:
- 久经考验的默认值,适用于云原生和容器工作负载。
- 减少了云中的内存浪费。
- 更好的启动和预热性能。
安装
适用于 Java 的 Azure 命令启动器适用于 x64 和 arm64 Linux。 支持的安装方法包括:
- 将容器映像与预安装的工具配合使用。
- 在 Azure Linux 上安装。
- 从 Microsoft 产品的 Linux 软件存储库安装。
容器映像
该工具包含在 Microsoft Build of OpenJDK 的容器镜像中。 无需进行更多设置。
例如,以下 Dockerfile 使用 jaz 从 jar 文件中运行 Java 应用程序:
# Use any Microsoft Build of OpenJDK base image
FROM mcr.microsoft.com/openjdk/jdk:25-ubuntu
# Add your application.jar
COPY application.jar /application.jar
# Use jaz to launch your Java application
CMD ["jaz", "-jar", "application.jar"]
Azure Linux 上安装
对于虚拟机和其他 Azure Linux 环境,可以使用 tdnf 包管理器安装该工具。 使用以下命令安装 jaz 包:
sudo tdnf install jaz
其他 Linux 分发版
如果已为 Microsoft 产品设置 Linux 软件存储库,请运行分发版的相应包管理器命令以安装 jaz 包。
例如,在基于 Ubuntu 或 Debian 的分发版上,运行:
sudo apt-get install jaz
如果尚未设置适用于 Microsoft 产品的 Linux 软件存储库,请按照 Linux 分发版的说明进行操作。
若要在 Ubuntu 上安装,请打开终端并运行以下命令:
wget "https://packages.microsoft.com/config/ubuntu/$(. /etc/os-release; echo $VERSION_ID)/packages-microsoft-prod.deb" -O packages-microsoft-prod.deb && \
sudo dpkg -i packages-microsoft-prod.deb
添加存储库后,运行以下命令进行安装 jaz :
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install jaz
支持的 JVM 版本
用于Java的 Azure 命令启动器要求系统上存在基于 OpenJDK 的 JDK 安装(版本 8 或更高版本)。 已经过测试的有:
- Eclipse Temurin 使用 HotSpot JVM 的 OpenJDK 8
- Microsoft Build of OpenJDK 11、17、21 和 25。
重要
Java的 Azure 命令启动器需要完整的 JDK 安装。 未对仅 JRE 安装或自定义 jlink 运行时进行全面测试。 有关详细信息,请参阅 “为什么它不适用于 JRE 或 jlink 运行时?”。
配置
该 jaz 命令不消耗任何用于其自身配置的命令行参数。
相反,默认情况下,它将所有参数直接传递给 java 命令。
为了确保jaz配置不会干扰应用程序的命令行参数,jaz仅通过环境变量接受配置。
jaz命令可以使用以下环境变量配置:
使用环境变量而不是命令行参数也使在某些情况下更易于配置 jaz 。
部署容器化应用程序时,设置环境变量有时比修改启动脚本更容易,而在评估JAZ_IGNORE_USER_TUNING时,尝试使用JAZ_BYPASS和jaz可能会很有用。
路线图
- ⚙️ JVM 配置概要
- 📦 AppCDS 支持
- 🔄 持续调优
- 📊 遥测
- 📦 Leyden 支持
Changelog
0.0.0-preview+20260408.1
- 依赖项更新。
0.0.0-preview+20260403.2
- 依赖项更新。
0.0.0-preview+20260323.1
- 依赖项更新。
0.0.0-preview+20260223.1
- 依赖项更新。
0.0.0-preview+20260120.1
- 依赖项更新。
0.0.0-preview+20251211.7
- 依赖项更新。
- 其他错误修复。
0.0.0-preview+20251205.1
- 内部漏洞修复。
0.0.0-preview+20251126.1
- 将 Microsoft Build of OpenJDK 25 添加到认证版本列表。
0.0.0-preview+20251120.1
- 依赖项更新。
0.0.0-preview+20251118.1
- 进入公共预览阶段。
- 实现 RPM 和 DEB 包。
- 改进垃圾回收器的内存释放调整。
- 停止在Java程序以非零代码退出时输出不明确的诊断信息。
- 改进将操作系统信号转发到 Java 进程,比如
SIGTERM和SIGINT。- 停止运行Java应用程序的容器现在可让应用程序正常关闭。
- 删除使用
PrintFlagsFinal,从而提高与某些Java应用程序的兼容性。- 修复对
System.console()引发异常的调用。 - 修复 stdout 流缓冲:
jaz在看到换行符之前,不再延迟中继输出。
- 修复对
- 对内部稳定性的其他错误修复和改进。
私有预览版 2
- 问题修复。
- 通过减少 glibc 要求扩展 Linux 发行版兼容性。
-
jaz现在检测是否存在任何手动 JVM 优化,在这种情况下,它不会应用自己的调整。 -
JAZ_IGNORE_USER_TUNING=1如果存在,则忽略手动 JVM 优化,并改为应用 jaz 自己的优化调整。 - 修复了在使用 OpenJDK HotSpot JVM 8 和
PrintFlagsFinal时出现(未请求的)jaz输出的问题。
私有预览版 1
- Java的 Azure 命令启动器的初始版本。
遥测
Azure用于Java的命令启动器收集使用情况数据并将其发送到Microsoft,以帮助改进我们的产品和服务。 若要了解详细信息,请阅读我们的 隐私声明。