Java用の Azure コマンド ランチャー (パブリック プレビュー)

Java用の Azure コマンド ランチャー (jaz) は、開発者がAzureでアプリケーションを実行Java方法を簡略化する軽量ユーティリティです。 クラウド環境向けに調整Java仮想マシン (JVM) オプションをインテリジェントに適用することで、このツールは構成オーバーヘッドを削減し、すぐに使用できるリソース使用率を向上させ、パフォーマンスを向上させる可能性が高くなります。

次の条件に当てはまる開発者に最適なツールです。

  • チューニング ガイドに深く取り組まずに、JVM の既定値を改善する必要があります。
  • Spring Boot、Quarkus、Micronaut などのフレームワークを使用して、クラウド ネイティブ マイクロサービスを開発してデプロイします。
  • Kubernetes や OpenShift などのコンテナー ベースのワークフローを優先します。
  • Azure Container Apps、Azure Kubernetes Service、Azure Red Hat OpenShift、またはAzure Virtual MachinesにJavaワークロードをデプロイします。

主な機能

  • 🛠 クラウドネイティブデプロイの JVM フラグを自動的に調整します。
  • 🚀 プラグ アンド プレイ エクスペリエンス。 Dockerfile にドロップするか、スクリプトを起動して、 java コマンドを jazに置き換えます。
  • ☁️ Azure環境向けに最適化されています。
  • 🔧 環境変数を使用してカスタマイズできます。 構成の変更を安全にロールアウトするには、いくつかの方法があります。

サポートされる環境

Java用の Azure コマンド ランチャーは、Linux ベースの環境でJavaランチャーを使用できる場所であればどこでも使用できます。 これは、次のAzureおよび CI/CD プラットフォームで検証およびテストされています。

  • Azure Kubernetes Service (AKS)
  • Azure Container Apps
  • Azure App Service
  • Azure Functions
  • Azure Red Hat OpenShift (ARO)
  • Azure 仮想マシン
  • Azure DevOps
  • GitHub Codespaces
  • GitHub Actions

パブリック プレビュー

Java用のAzure コマンド ランチャーがパブリック プレビューで利用可能になりました。 このツールとその利点の概要については、 パブリック プレビューのお知らせ をお読みください。

動作方法

Java用の Azure コマンド ランチャーは、コンテナーまたは仮想マシンのスタートアップ コマンドと JVM の間に配置されます。 ツールを起動すると、次のようになります。

  1. クラウド環境 (コンテナーの制限や使用可能なメモリなど) を検出します。
  2. ワークロードの種類を分析し、次のような最適な JVM チューニング フラグを選択します。
    • ヒープサイズの設定
    • ガベージ コレクターの選択とチューニング。
    • 必要に応じて、ログ記録と診断の設定を行います。
  3. Java プロセスを起動し、チューニング フラグとユーザー指定の引数を渡します。
  4. Java プロセスとの間で stdout、stderr、stdin、OS のシグナルを非表示にリレーします。
  5. Java プロセスを監視し、終了時にその終了コードをリレーします。

使用例

Java用の Azure コマンド ランチャーは、java コマンドのドロップインの代わりであり、コードを変更する必要はありません。 javaを起動スクリプトのjazに置き換えるだけです。たとえば、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 Linux と arm64 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 以降) がシステムに存在する必要があります。 以下でテストされています。

Important

Java用の Azure コマンド ランチャーには、完全な JDK インストールが必要です。 JRE のみのインストールまたはカスタム jlink ランタイムでは完全にはテストされません。 詳細については、「 JRE ランタイムまたは jlink ランタイムで動作しない理由」を参照してください。

コンフィギュレーション

jaz コマンドは、独自の構成にコマンドライン引数を使用しません。 代わりに、既定では、すべての引数が java コマンドに直接渡されます。 jaz構成がアプリケーションの引数に干渉しないように、jazは環境変数を介してのみ構成を受け入れます。

jaz コマンドは、次の環境変数を使用して構成できます。

環境変数 説明
JAZ_HELP ヘルプ メッセージを出力し、コード 1で終了するには、0に設定します。
JAZ_PRINT_VERSION 1バージョンを stdout に出力し、コード jazで終了するには、0に設定します。
JAZ_DRY_RUN 1に設定すると、実行されるjavaコマンドが出力され、コード 1で終了します。
JAZ_BYPASS 1最適化の調整をバイパスするには、jazに設定します。 テレメトリには影響しません。
JAZ_IGNORE_USER_TUNING 1に設定すると、ユーザーが指定したすべてのチューニング フラグが無視され、代わりにjazチューニングが適用されます。 それ以外の場合、 jaz は、ユーザー指定のチューニング フラグが検出されない場合にのみ JVM をチューニングします。 この設定を有効にした場合と有効にしない場合のの動作の詳細については、「jazを参照してください。
JAZ_EXIT_WITHOUT_FLUSH 終了時にテレメトリのフラッシュをスキップするには、 1 に設定します。 これにより、データのフラッシュ中に発生する可能性がある遅延 (最大 30 秒) jaz が回避されますが、 jaz はテレメトリを送信する可能性があります。

コマンドライン引数ではなく環境変数を使用すると、場合によっては jaz を簡単に構成できます。 コンテナー化されたアプリケーションをデプロイする場合、起動スクリプトを変更するよりも環境変数を設定する方が簡単な場合があります。また、JAZ_IGNORE_USER_TUNINGを評価するときにJAZ_BYPASSjazを試す方が便利な場合があります。

ロードマップ

  • ⚙️ JVM 構成プロファイル
  • 📦 AppCDS のサポート
  • 🔄 継続的なチューニング
  • 📊 テレメトリー
  • 📦 Leyden のサポート

変更ログ

0.0.0-preview+20260421.1

  • 依存関係の更新。

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プログラムが0以外のコードで終了する場合、不明瞭な診断出力を生成するのを停止します。
  • SIGTERMSIGINT など、Java プロセスへの OS シグナル転送を改善します。
    • 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コマンド ランチャー for Javaは使用状況データを収集し、製品やサービスの改善に役立つMicrosoftに送信します。 詳細については、 プライバシーに関する声明をお読みください。