Azure Command Launcher for Java についてよく寄せられる質問 (パブリック プレビュー)

Azure Command Launcher for Java に関する一般的な質問への回答を提供します。

このツールと java コマンドの違いは何ですか?

java コマンドは、ユーザーが明示的に構成しない限り、既定の設定で HotSpot JVM (Java 仮想マシン) を実行します。 jaz は、Azure VM とコンテナーのパフォーマンスとコスト効率を向上させるために設計された、戦いでテストされたクラウド最適化 JVM チューニングの既定値を使用して java を起動する Azure Command Launcher for Java のコンポーネントです。

主な利点: 開発者は JVM を手動で調整する必要はありません。 jaz 彼らのためにそれを行います。

環境で JVM オプションを既に設定している場合はどうなりますか?

ワークロードに JVM チューニング フラグが含まれている場合、 jaz コマンドは独自のチューニングの既定値を適用しません。 jaz は、選択したフラグで java を起動します。

ワークロードのチューニング フラグを削除し、Azure Command Launcher for Java に独自のチューニング フラグを適用することをお勧めします。

チューニング フラグを無視し、そのチューニングの既定値を使用するように jaz を構成することもできます。 この構成を使用して、ワークロード構成の変更を最小限に抑えて jaz を検証することを検討してください。 これを行うには、次の環境変数を設定します。

export JAZ_IGNORE_USER_TUNING=1

ユーザー チューニングの無視設定は、コマンド ライン引数、 javaによって読み取られた環境変数、および @-files に適用されます。

次の環境変数を設定して、チューニングの既定値をすべてスキップするように jaz を構成することもできます。

export JAZ_BYPASS=1

バイパス オプションを使用すると、ワークロードで java コマンドの既定の動作が使用されている場合でも、現在のチューニングに影響を与えることなく、Azure Command Launcher for Java にオンボードできます。 この動作は、JVM チューニング フラグをクリーンアップする前にツールの動作を検証する場合に役立ちます。

また、JVM チューニングに関連していると思われる問題のトラブルシューティングを行うときに、チューニングをバイパスすると便利な場合もあります。

チューニング フラグと見なされる JVM オプション

jaz コマンドは、-Xまたは-XXで始まるほとんどのフラグを、-Xmx<size>などのチューニング フラグと見なします。 -Xで始まるがチューニング フラグではないフラグの注目すべき例は-Xlog:<opts>

より正確には、各 JVM オプションは、次の一覧のロジックを使用して評価されます。 この一覧では、Azure Command Launcher for Java の最新バージョンのロジックについて説明します。

  1. オプションが -X 以外のテキストで始まる場合は、チューニング フラグではありません。
  2. オプションが次の正規表現のいずれかに一致する場合、チューニング フラグではありません。
    • ^-Xlog.+$
    • ^-XX:ErrorFile=.*$
    • ^-XX:[+-]?HeapDump.*$
    • ^-XX:[+-].*OnOutOfMemoryError$
  3. それ以外の場合、オプションはチューニング フラグです。

jaz がチューニングフラグを検索すると、渡された引数とjava が自動的に読み取る環境変数を調べます。 環境変数は次のとおりです。

  • Java 8: JAVA_TOOL_OPTIONS_JAVA_OPTIONS
  • Java 9 以降: JAVA_TOOL_OPTIONSJDK_JAVA_OPTIONS_JAVA_OPTIONS

jaz また、コマンド ライン引数ファイルとも呼ばれる @-files も処理します。

ツールを使用するときに Java エージェント フラグを渡すことができますか?

Yes. チューニング フラグではない -javaagent やその他のフラグを引き続き渡すことができます。また、 jaz はそれらを優先します。 次のような便利な診断フラグを保持できます。

  • -Xlog ログ記録用
  • -javaagent Application Insights またはその他のアプリケーションパフォーマンス監視 (APM) 計装エージェント用

このツールは Azure 以外の環境と互換性がありますか?

jaz は主に Azure コンテナーと仮想マシン用に設計およびテストされていますが、技術的には他の場所で実行できます。 ただし、一部の高度な最適化と今後の機能は、Azure 固有である可能性があります。

このツールは Windows Server で使用できますか?

jaz は現在、x64 および arm64 環境の Linux で使用できます。 Windows Serverがすぐに必要な場合は、openjdk-support@microsoft.comまでお問い合わせください。

Azure Command Launcher for Java は、完全な JDK インストールでのみテストおよび認定されています。 次の場合、正しく動作しない可能性があります。

  • JRE (Java ランタイム環境) のインストール
  • カスタム jlink ランタイム

完全な JDK インストールには、正常に動作するために必要なすべてのツールとライブラリ jaz 含まれています。 JRE および jlink カスタム ランタイムには、これらのコンポーネントの一部が不足している可能性があるため、 jaz が想定どおりに機能しなくなる可能性があります。

cgroup マウント ポイントが重要な理由

Java用の Azure コマンド ランチャーは、/sys/fs/cgroup から cgroup v1 と v2 の情報を読み取り、使用可能なリソース (メモリ制限や CPU 制約など) を決定し、それに応じて JVM を調整します。 cgroup ファイルシステムが標準の /sys/fs/cgroup の場所にマウントされていない場合、 jaz はコンテナー化の制限を正しく検出できない可能性があります。 jazは、コンテナーの実際の制限ではなく、ホストのリソースに基づいて JVM を調整する可能性があるため、パフォーマンスが低下したり、メモリ不足エラーが発生したりする可能性があります。

cgroup マウント ポイントが /sys/fs/cgroup以外の実際のシナリオを特定していません。 ただし、cgroup ファイルシステムを /sys/fs/cgroup からマウント解除し、別の場所にマウントすることで、コンテナー内でこのシナリオをシミュレートできます。 その後、 jaz は cgroup 情報を読み取ることができず、コンテナー対応のチューニングは適用されません。

問題を回避するには、cgroup マウント ポイントを標準の /sys/fs/cgroup の場所から変更しないでください。

cgroup マウント ポイントはコンテナー化された環境で最も関連性が高いものの、リソース管理に cgroup を使用する仮想マシンやその他の Linux 環境にも関連します。

このツールは、入れ子になった cgroup 構成で動作しますか?

入れ子になった cgroup 構成は、Javaの Azure コマンド ランチャーがリソース制限を読み取る方法に影響する可能性があります。 jaz は入れ子になった cgroup 階層でテストされていないため、これらの環境でリソースの制約が正しく検出されない可能性があります。

入れ子になった cgroup を使用していて、予期しない動作が発生した場合は、 openjdk-support@microsoft.comにお問い合わせください。