Azure Kubernetes Service (AKS)での JVM パフォーマンスの問題を調査するには、Azure SRE エージェントのJavaにAzureパフォーマンス診断ツールを使用します。 このツールは、実行中のJavaワークロードからプロファイリング データを収集し、アプリケーションをオフラインにすることなくボトルネックを特定するのに役立つ結果を返します。
[前提条件]
- AKS クラスターで実行されているJava アプリケーション
- ターゲット クラスターにアクセスできる Azure SRE エージェント環境
- Azure SRE エージェントを使用してワークロードを検査し、診断を実行するためのアクセス許可
-
kubectlコマンド ラインから注釈を追加する場合は、インストールおよび構成済み
サポートされている診断
Azure パフォーマンス診断ツール for Javaは、次のような問題を特定するのに役立ちます。
- ガベージ コレクションの非効率性と長時間の一時停止
- CPU の過剰使用または過大使用
- 応答時間に影響する I/O 負荷の高い動作
- スレッドの競合と同期のボトルネック
Java診断を有効にする
診断を有効にするには、languageStack: java 注釈を追加して、ワークロードにJava アプリケーションとしてラベルを付けます。
ポッド仕様に注釈を追加する
ワークロード定義のポッド メタデータに注釈を追加します。
apiVersion: v1
kind: Pod
metadata:
name: your-java-app
annotations:
languageStack: java
spec:
containers:
- name: app
image: your-java-app:latest
kubectl を使用して注釈を追加する
ポッドが既に実行されている場合は、コマンド ラインから注釈を追加します。
kubectl annotate pod your-java-app languageStack=java
この注釈を追加すると、次のことが確認されます。
- ポッドは、Java アプリケーションを実行しています。
- SRE エージェントAzureポッドに対してJava診断を実行できます。
Note
診断プロセスは中断を最小限に抑えるように設計されていますが、Java Flight Recorder ではオーバーヘッドが発生します。 運用環境で使用する前に、非運用環境でのエクスペリエンスを検証します。
診断の実行中に何が起こるか
SRE エージェントAzure Java診断の実行を開始すると、次のようになります。
- ターゲット ポッドにエフェメラル コンテナーを作成します。
- 診断コンテナーを Java コンテナーにアタッチします。
- Java Flight Recorder (JFR) を使用してテレメトリを収集します。
- キャプチャされたデータを分析します。
- 実行の完了後に診断コンテナーを削除します。
このプロセスは、Azure SRE エージェントが必要なデータを収集する間、アプリケーションをオンラインに保ちます。
エフェメラル コンテナーについて
Kubernetes は、終了したエフェメラル コンテナーのレコードを保持します。
kubectl describe podを実行した場合、実行が完了した後も、完了した診断コンテナーが表示されます。 ノイズを減らすために、Azure SRE エージェントは、ポッドごとに診断を 5 つのエフェメラル コンテナーに制限します。
Java診断を要求する
診断は手動で要求することも、Azure SRE エージェントがパフォーマンスの問題を検出したときにトリガーすることもできます。
手動診断要求を実行する
Azure SRE エージェントで、チャット エクスペリエンスを開き、検査するJava サービスのワークロードの詳細を指定します。
Analyze the performance of:
pod: my-petclinic-app
container: spring-petclinic-rest
namespace: production
aks instance: my-aks-cluster
ポッド名、コンテナー名、名前空間、および AKS クラスター名を含め、SRE エージェントAzure適切なワークロードをターゲットにすることができます。
Java診断用のカスタム サブエージェントを作成する
チームが専用の診断ワークフローを必要とする場合は、Java診断ツールに要求をルーティングするカスタム サブエージェントを作成します。
サブエージェントを構成する
- Azure SRE エージェントで、Sub-Agent Builder を開きます。
- [ 新しいサブエージェントの作成] を選択します。
- 必要なツールとハンドオフ動作の構成を追加します。
構成の例
api_version: azuresre.ai/v1
kind: AgentConfiguration
spec:
name: AKSDiagnosticAgent
system_prompt: >-
Take the details of a diagnostic analysis to be performed on an AKS container
and hand off to the appropriate diagnostic tool. If you need to find the resource
to diagnose, use the SearchResourceByName and ListResourcesByType tools.
tools:
- GetCPUAnalysis
- GetMemoryAnalysis
- SearchResourceByName
- ListResourcesByType
- AnalyzeJavaAppInAKSContainer
handoff_description: >-
Use this agent when the user requests an AKS diagnostic analysis or when the
investigation requires a Java diagnostics run.
agent_type: Autonomous
サブエージェントを使用する
サブエージェントを作成したら、チャットから要求を送信できます。
/agent AKSDiagnosticAgent I am having a performance issue in:
pod: illuminate-test-petclinic
container: spring-petclinic-rest
namespace: illuminate-test
aks instance: jeg-aks
サブエージェントは、Java診断ワークフローを開始し、推奨される次の手順で結果を返します。
アラートから診断を委任する
また、アラートドリブンの調査をサブエージェントにルーティングして、SRE エージェントAzure自動応答フローの一部としてJava診断の実行を開始することもできます。
診断結果を解釈する
分析が完了すると、Azure SRE エージェントは次のような結果を返します。
- 主なボトルネックの根本原因の特定
- GC の一時停止時間やスレッドの待機時間などの診断分析情報
- 修復に関する推奨事項
結果を使用して次の手順を実行します。
- JVM 引数またはヒープ サイズを調整する
- アプリケーション コード パスを最適化する
- AKS リソースのスケーリング
- 監視とアラートの向上