Azure Command Launcher for Java (jaz) は、Java 開発者が Azure でアプリケーションを実行する方法を簡略化する軽量ユーティリティです。
クラウド環境向けに調整された 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 環境向けに最適化されています。
- 🔧 環境変数を使用してカスタマイズできます。 構成の変更を安全にロールアウトするには、いくつかの方法があります。
サポートされる環境
Azure Command Launcher for Java は、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
パブリック プレビュー
Azure Command Launcher for Java がパブリック プレビューで利用できるようになりました。 このツールとその利点の概要については、 パブリック プレビューのお知らせ をお読みください。
動作方法
Azure Command Launcher for Java は、コンテナーまたは仮想マシンのスタートアップ コマンドと JVM の間に配置されます。 ツールを起動すると、次のようになります。
- クラウド環境 (コンテナーの制限や使用可能なメモリなど) を検出します。
- ワークロードの種類を分析し、次のような最適な JVM チューニング フラグを選択します。
- ヒープサイズの設定
- ガベージ コレクターの選択とチューニング。
- 必要に応じて、ログ記録と診断の設定を行います。
- Java プロセスを起動し、チューニング フラグとユーザー指定の引数を渡します。
- Java プロセスとの間で stdout、stderr、stdin、OS のシグナルを非表示にリレーします。
- Java プロセスを監視し、終了時にその終了コードをリレーします。
使用例
Azure Command Launcher for Java は、 java コマンドのドロップインの代わりであり、コードを変更する必要はありません。
javaを起動スクリプトのjazに置き換えるだけです。たとえば、java -jar foo.jarをjaz -jar foo.jarに置き換えます。
JVM オプションを手動で調整する代わりに、
JAVA_OPTS="-XX:... several JVM tuning flags"
java $JAVA_OPTS -jar myapp.jar
jaz を使用して次のことを行います。
jaz -jar myapp.jar
アプリケーションでは、次のメリットが自動的に得られる場合があります。
- クラウド ネイティブワークロードとコンテナー ワークロードの、バトルテスト済みの既定値。
- クラウド内のメモリの無駄を減らしました。
- 起動とウォームアップのパフォーマンスの向上。
取り付け
Azure Command Launcher for Java は、x64 Linux と 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 のバージョン
Azure Command Launcher for Java では、OpenJDK ベースの JDK インストール (バージョン 8 以降) がシステムに存在する必要があります。 以下でテストされています。
- Eclipse Temurin OpenJDK 8 と HotSpot JVM
- Microsoft Build of OpenJDK 11、17、21、25。
Important
Azure Command Launcher for Java には、完全な JDK インストールが必要です。 JRE のみのインストールまたはカスタム jlink ランタイムでは完全にはテストされません。 詳細については、「 JRE ランタイムまたは jlink ランタイムで動作しない理由」を参照してください。
コンフィギュレーション
jaz コマンドは、独自の構成にコマンドライン引数を使用しません。
代わりに、既定では、すべての引数が java コマンドに直接渡されます。
jaz構成がアプリケーションの引数に干渉しないように、jazは環境変数を介してのみ構成を受け入れます。
jaz コマンドは、次の環境変数を使用して構成できます。
コマンドライン引数ではなく環境変数を使用すると、場合によっては jaz を簡単に構成できます。
コンテナー化されたアプリケーションをデプロイする場合、起動スクリプトを変更するよりも環境変数を設定する方が簡単な場合があります。また、JAZ_IGNORE_USER_TUNINGを評価するときにJAZ_BYPASSとjazを試す方が便利な場合があります。
ロードマップ
- ⚙️ JVM 構成プロファイル
- 📦 AppCDS のサポート
- 🔄 継続的なチューニング
- 📊 テレメトリー
- 📦 Leyden のサポート
変更ログ
パブリック プレビュー 1: 0.0.0-preview+20251118.1
- RPM パッケージと DEB パッケージを実装します。
- ガベージコレクターのアンコミット操作の調整を改善する。
- Java プログラムが 0 以外のコードで終了すると、不明な診断出力の出力を停止します。
-
SIGTERMやSIGINTなど、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
- Azure Command Launcher for Java の初期リリース。
テレメトリ
Azure Command Launcher for Java では、使用状況データが収集され、Microsoft に送信され、製品とサービスの改善に役立ちます。 詳細については、 プライバシーに関する声明をお読みください。