适用于 Java 的 Azure 命令启动器(jaz
)是一种轻型实用工具,可简化 Java 开发人员在 Azure 上运行应用程序的方式。
通过智能地应用针对云环境定制的 JVM 标志,可降低配置开销,并立即提高资源利用率,并具有更高的性能潜力。
此工具非常适合以下开发人员:
- 想要更好的 JVM 默认值,而无需深入探讨优化指南
- 使用 Spring Boot、Quarkus 或 Micronaut 等框架开发和部署云本机微服务
- 首选基于容器的工作流,例如 Kubernetes 和 OpenShift
- 在 Azure 容器应用、Azure Kubernetes 服务、Azure Red Hat OpenShift 或 Azure VM 上部署 Java 工作负荷
主要功能
- 🛠 自动调整用于云原生部署的 JVM 标志
-
🚀 即插即用体验。 只需放入 Dockerfile 或启动脚本,即可将
java
命令替换为jaz
- ☁️ 针对 Azure 环境进行优化。 如果更喜欢
jaz
JVM 配置建议,请从现有命令启动器中删除所有 JVM 优化标志 - 🔧 可通过环境变量进行自定义
私人预览
该工具可供申请个人预览版的客户下载。 可以 提交请求 以加入个人预览版。
工作原理
jaz
位于容器或 VM 启动命令与 JVM 之间。 它将:
- 检测云环境(例如容器限制、可用内存)
- 分析工作负荷类型并选择最适合 JVM 选项
- 使用优化的标志启动 Java 进程,例如:
- 堆大小设定
- GC 选择和优化
- 根据需要记录和诊断设置
示例用法
不要执行此操作:
JAVA_OPTS="-XX:... several JVM tuning flags"
java $JAVA_OPTS -jar myapp.jar
用:
jaz -jar myapp.jar
应用程序可能会从以下项中自动受益:
- 云原生和容器工作负载的久经考验的默认设置
- 减少云中的内存浪费
- 更好的启动和预热性能
安装
在个人预览版中,软件以文件的形式 tar.gz
分发,其中包含 x64 和 arm64 的二进制文件,并且可以轻松地安装在容器映像中。
FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu
# Install jaz
COPY jaz-versionstring.tar.gz /tmp/
RUN tar -xzf /tmp/jaz-versionstring.tar.gz -C / && mv /jaz*/jaz /usr/bin
# Add your application.jar
COPY application.jar /application.jar
CMD ["jaz", "-jar", "application.jar"]
支持的 JVM 版本
jaz
支持 OpenJDK HotSpot JVM 版本 8、11、17 和 21。
jaz
已使用Microsoft 的 OpenJDK 内部版本和Eclipse Temurin进行测试。
配置
jaz
该命令只能使用环境变量进行配置,因为任何参数jaz
都必须符合java
启动器。
环境变量 | 说明 |
---|---|
JAZ_HELP |
将其设置为 1 ,以打印帮助信息。 |
JAZ_PRINT_VERSION |
设置为 1 打印 jaz 版本到 stdout,并使用代码 0 退出。 |
JAZ_DRY_RUN |
1 设置为输出待执行的 Java 命令,并使用代码1 退出。 |
JAZ_BYPASS |
设置为 1 以跳过 jaz 优化调整。 当切换回 java 会导致干扰时非常有用,例如在容器化环境中。 对遥测没有影响。 |
JAZ_EXIT_WITHOUT_FLUSH |
1 设置为跳过退出时刷新遥测数据。 避免 jaz 在刷新数据时可能引入的延迟(最多 30秒)。 可能仍会发送一些遥测数据。 |
JAZ_SKIP_PRINT_FLAGS_FINAL |
将设置为 1 以跳过传递 -XX:+PrintFlagsFinal 。 避免因为 jaz 执行扫描/缓冲 stdout 来确定最终 JVM 标志。 |
JAZ_ALWAYS_FILTER_PRINT_FLAGS_FINAL_STDOUT |
将 1 设置为始终从 stdout 中筛选掉 PrintFlagsFinal 。 通常,仅当 jaz 检测到标志已通过时,jaz 才会筛选。 如果 JAZ_SKIP_PRINT_FLAGS_FINAL 已设置,则忽略。 |
路线图
- 📦 Linux 包(DEB/RPM)和容器映像
- ⚙️ JVM 配置方案
- 📦 AppCDS 支持
- 📦 Leyden 支持
- 🔄 持续优化
- 📊 通过 Prometheus 共享的遥测数据
遥测
用于 Java 的 Azure Command Launcher 收集使用情况数据并将其发送到Microsoft,以帮助改进我们的产品和服务。 阅读隐私声明了解更多信息。