アプリケーションモニタリングの継続的プロファイリング機能は、Java プログラムにおける CPU、メモリー、または I/O によって引き起こされるボトルネックを効果的に発見し、メソッド名、クラス名、および行番号別に統計データを表示できます。これにより、開発者はプログラムを最適化し、レイテンシを削減し、スループットを向上させ、コストを節約できます。このトピックでは、継続的プロファイリング機能を有効にする方法と、プロファイリングデータを表示する方法について説明します。
アプリケーションモニタリングは、新しい請求モードを有効にしているユーザー向けに、新しいアプリケーション詳細ページを提供します。詳細については、請求(新規)を参照してください。
新しい請求モードを有効にしていない場合は、アプリケーション一覧ページで新バージョンに切り替えをクリックして、新しいアプリケーション詳細ページを表示できます。
継続的プロファイリング機能のパフォーマンステストが実施されました。主流の Spring Web アプリケーションのすべての機能が有効になっている場合、CPU 使用率は約 5% 増加し、オフヒープメモリーの使用量は約 50 MB 増加し、ガベージコレクション(GC)とリクエストレイテンシはほとんど増加しませんでした。
前提条件
アプリケーションモニタリング Pro エディションと従量課金制の請求モードのみが継続的プロファイリングをサポートしています。Pro エディションのアクティブ化方法については、従量課金制を参照してください。従量課金制の請求モードへの切り替え方法については、請求を参照してください。
継続的プロファイリング機能は、Alibaba Finance Cloud および Alibaba Gov Cloud の一部のリージョンではサポートされていません。これらのリージョンでこの機能を使用する場合は、DingTalk グループ(ID:22560019672)に参加してテクニカルサポートを受けてください。
継続的プロファイリングデータは 7 日間のみ保存できます。
アプリケーションはアプリケーションモニタリングによって監視されています。ARMS エージェントのバージョンは 2.7.3.5 以降です。アプリケーションモニタリングでアプリケーションを監視する方法については、アプリケーションモニタリングの概要を参照してください。ARMS エージェントのアップグレード方法については、ARMS エージェントの更新を参照してください。
アプリケーションが存在する仮想プライベートクラウド(VPC)のアクセス制御ポリシーで、オブジェクトストレージサービス(OSS)バケットが指定されています。OSS バケットは、プロファイリングデータを保存するために使用されます。ポリシーでバケットが指定されていない場合、データは収集できません。OSS バケットの名前は arms-profiling-<regionId> です。<regionId> はリージョン ID に置き換えます。たとえば、アプリケーションが中国(杭州)リージョンにデプロイされている場合、バケット名は arms-profiling-cn-hangzhou です。
継続的プロファイリング機能は、OpenJDK および Oracle JDK でのみ使用できます。
制限事項
オペレーティングシステムカーネル
オペレーティングシステムカーネルは、Linux 2.6.32-431.23.3.el6.x86_64 以降である必要があります。
uname -r
コマンドを実行して、カーネルバージョンをクエリできます。
JDK バージョン
継続的プロファイリング機能は、Java Virtual Machine Tool Interface (JVM TI) を使用して、アプリケーションのメソッドスタックを取得します。これにより、アプリケーションの実行中に CPU 使用率とメモリー使用量の detaljer を取得できます。JVM TI はアプリケーションのクラッシュを引き起こす可能性があります。次の JDK バージョンでは、この問題が修正されています:OpenJDK 8u352、11.0.17、および 17.0.5、および Oracle JDK 11.0.21 および 17.0.9。詳細については、AsyncGetCallTrace may crash JVM on guarantee を参照してください。その他の JDK バージョンについては、アプリケーションモニタリングの研究開発チームがさまざまなテストを実施し、アプリケーションのクラッシュはごく少数のシナリオでのみ発生することを発見しました。アプリケーションモニタリングは、継続的プロファイリング機能を強制的に無効にすることはありません。必要に応じて、特定のアプリケーション IP アドレスに対してこの機能を使用できます。それでも、アプリケーションの安定性を確保するために、要件を満たす JDK バージョンを使用することをお勧めします。
継続的プロファイリング機能は、主に JDK のデバッグシンボルに依存しています。ただし、Alpine ベースイメージは、メモリー使用量を制御するために JDK からデバッグシンボルを削除します。この方法では、継続的プロファイリング機能を期待どおりに使用できません。Alpine ベースイメージを使用しないことをお勧めします。
次の表に、推奨される JDK バージョンを示します。
JDK | バージョン |
OpenJDK |
|
Oracle JDK |
|
継続的プロファイリングを有効にする
ARMS console にログインします。左側のナビゲーションペインで、 を選択します。
アプリケーション一覧ページで、上部ナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明言語列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
:Java アプリケーション
:Go アプリケーション
:Python アプリケーション
ハイフン(-):Managed Service for OpenTelemetry で監視されているアプリケーション。
上部ナビゲーションバーで、
を選択します。継続的プロファイリング設定セクションで、メインスイッチをオンにし、リアルタイム有効 IP または リアルタイム有効ネットワークセグメントパラメーターを構成します。
保存をクリックします。
プロファイリングデータを表示する
ARMS console にログインします。左側のナビゲーションペインで、 を選択します。
アプリケーション一覧ページで、上部ナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明言語列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
:Java アプリケーション
:Go アプリケーション
:Python アプリケーション
ハイフン(-):Managed Service for OpenTelemetry で監視されているアプリケーション。
上部ナビゲーションバーで、
を選択します。アプリケーションインスタンスリストで、アプリケーションインスタンスを選択します。ページの右側で、期間を設定します。
右側ペインの 単一ビュータブで、次の操作を実行してデータをクエリし、集計分析結果を表示します。
時間枠サイズセクション(アイコン 1)で、スナップショット期間を選択し、折れ線グラフをドラッグして期間を選択します。
ドロップダウンリスト(アイコン 2)から、表示するデータ(CPU、JVM ヒープ、JVM GC に関するデータ)を選択します。
図に示すように、期間内(アイコン 3)のデータが表示されます。集計分析をクリックして、スナップショットの詳細を表示できます。
ホットスポットコード機能を使用する
継続的プロファイリング機能に加えて、ホットスポットコード分析機能も有効にできます。これにより、継続的プロファイリング技術を使用して、リクエストスレッドのスタックスナップショットを定期的に収集し、コードの実行をシミュレートできます。詳細については、ホットスポットコード分析機能を使用して低速トレースを診断する を参照してください。
参考資料
継続的プロファイリング機能を使用して、高い CPU 使用率とメモリー使用率のトラブルシューティングを行うことができます。次のトピックを参照してください。
継続的プロファイリングに関する FAQ の詳細については、FAQ を参照してください。