适用于 Java 的 Azure 命令启动器(jaz)是一种轻型实用工具,可简化 Java 开发人员在 Azure 上运行应用程序的方式。
通过智能地应用专为云环境定制的 Java 虚拟机(JVM)选项,该工具可减少配置开销,并现成提高资源利用率,并具有更高的性能潜力。
此工具非常适合以下开发人员:
- 想要更好的 JVM 默认值,而无需深入探讨优化指南。
- 使用 Spring Boot、Quarkus 或 Micronaut 等框架开发和部署云本机微服务。
- 首选基于容器的工作流,例如 Kubernetes 和 OpenShift。
- 在 Azure 容器应用、Azure Kubernetes 服务、Azure Red Hat OpenShift 或 Azure 虚拟机上部署 Java 工作负荷。
主要功能
- 🛠 自动优化调整用于云原生部署的 JVM 参数。
-
🚀 即插即用体验。 只需放入 Dockerfile 或启动脚本,即可将
java命令替换为jaz。 - ☁️ 针对 Azure 环境进行优化。
- 🔧 可通过环境变量进行自定义。 可通过多种方式安全地推出配置更改。
支持的环境
只要 Java 启动器在基于 Linux 的环境中可用,就可以使用 Azure 命令启动器。 它已通过以下 Azure 和 CI/CD 平台进行验证和测试:
- Azure Kubernetes 服务 (AKS)
- Azure 容器应用
- Azure App 服务
- Azure Functions
- Azure Red Hat OpenShift (ARO)
- Azure 虚拟机
- Azure DevOps
- GitHub Codespaces
- GitHub Actions
公共预览
适用于 Java 的 Azure 命令启动器现在以公共预览版提供! 阅读 公共预览版公告 ,了解此工具及其优势。
工作原理
适用于 Java 的 Azure 命令启动器位于容器或虚拟机启动命令与 JVM 之间。 启动该工具时,它会:
- 检测云环境(例如容器限制和可用内存)。
- 分析工作负荷类型并选择最适合 JVM 优化标志,例如:
- 堆大小设定。
- 垃圾回收器选择和调优。
- 根据需要配置日志记录和诊断设置。
- 启动 Java 进程,向其传递优化标志和任何用户提供的参数。
- 不显式地中继 stdout、stderr、stdin 和 OS 信号,在 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。 支持的安装方法包括:
容器映像
该工具包含在 openJDK 的Microsoft版本的容器映像中。 无需进行更多设置。
例如,此 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 上安装
使用以下命令安装 jaz 包:
sudo tdnf install jaz
从适用于 Microsoft 产品的 Linux 软件存储库安装
如果已为 Microsoft 产品设置 Linux 软件存储库,请运行分发版的相应包管理器命令以安装 jaz 包。
否则,请在以下列表中找到与 Linux 分发版匹配的说明。
按照说明进行操作,但安装jaz而不是msopenjdk-25包。
支持的 JVM 版本
适用于 Java 的 Azure 命令启动器支持基于 OpenJDK 的生成,并已通过以下方法进行测试:
- Eclipse Temurin 使用 HotSpot JVM 的 OpenJDK 8
- Microsoft OpenJDK 版本 11、17、21 和 25。
配置
该 jaz 命令不消耗任何用于其自身配置的命令行参数。
相反,默认情况下,它将所有参数直接传递给 java 命令。
为了确保jaz配置不会干扰应用程序的命令行参数,jaz仅通过环境变量接受配置。
jaz命令可以使用以下环境变量配置:
| 环境变量 | 说明 |
|---|---|
JAZ_HELP |
设置为 1 打印帮助消息并使用代码 0退出。 |
JAZ_PRINT_VERSION |
设置为 1 打印 jaz 到 stdout 的版本,并使用代码 0退出。 |
JAZ_DRY_RUN |
将1设置为打印将执行的java命令,并以1代码退出。 |
JAZ_BYPASS |
将其设置为 1 以绕过 jaz 的优化调整。 对遥测没有影响。 |
JAZ_IGNORE_USER_TUNING |
设置为 1 以忽略所有用户提供的调优标志,改用 jaz 调优。 否则,jaz 只有在 JVM 检测到没有用户提供的调整标志时,才会调整 JVM。 关于启用或不启用此设置时jaz的行为的详细信息,请参阅“如果我已在我的环境中设置了一些 JVM 选项,会发生什么情况?”。 |
JAZ_EXIT_WITHOUT_FLUSH |
设置为 1 以在退出时跳过刷新遥测数据。 这可以避免 jaz 在刷新数据时可能会引入的潜在延迟(最多 30s),然而 jaz 仍可能会发送遥测数据。 |
使用环境变量而不是命令行参数也使在某些情况下更易于配置 jaz 。
部署容器化应用程序时,设置环境变量有时比修改启动脚本更容易,而在评估jaz时,尝试使用JAZ_IGNORE_USER_TUNING和JAZ_BYPASS可能会很有用。
路线图
- ⚙️ JVM 配置概要
- 📦 AppCDS 支持
- 🔄 持续调优
- 📊 遥测
- 📦 Leyden 支持
Changelog
公共预览版 1:0.0.0-preview+20251118.1
- 实现 RPM 和 DEB 包。
- 改进垃圾回收器的内存释放调整。
- 当 Java 程序以非零返回码退出时,停止输出不明确的诊断信息。
- 改进 OS 到 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 Command Launcher 的初始版本。
遥测
用于 Java 的 Azure Command Launcher 收集使用情况数据并将其发送到Microsoft,以帮助改进我们的产品和服务。 若要了解详细信息,请阅读我们的 隐私声明。