适用于 Java 的 Azure 命令启动器(专用预览版)

适用于 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 之间。 它将:

  1. 检测云环境(例如容器限制、可用内存)
  2. 分析工作负荷类型并选择最适合 JVM 选项
  3. 使用优化的标志启动 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,以帮助改进我们的产品和服务。 阅读隐私声明了解更多信息。