アプリケーションモニタリングの継続的プロファイリング機能は、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バージョンについては、アプリケーションモニタリングR&Dチームがさまざまなテストを実施し、アプリケーションのクラッシュはごく少数のシナリオでのみ発生することを発見しました。アプリケーションモニタリングは、継続的プロファイリング機能を強制的に無効にすることはありません。必要に応じて、特定のアプリケーションIPアドレスに対してこの機能を使用できます。それでも、アプリケーションの安定性を確保するために、要件を満たすJDKバージョンを使用することをお勧めします。
継続的プロファイリング機能は、主にJDKのデバッグシンボルに依存しています。ただし、Alpineベースイメージは、メモリ使用量を制御するためにJDKからデバッグシンボルを削除します。このため、継続的プロファイリング機能は期待どおりに使用できません。Alpineベースイメージを使用しないことをお勧めします。
次の表に、推奨されるJDKバージョンを示します。
JDK | バージョン |
OpenJDK |
|
Oracle JDK |
|
ARMSコンソールで継続的プロファイリング機能を有効にする
ARMSコンソールにログインします。左側のナビゲーションペインで、 を選択します。
アプリケーションリストページで、上部ナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明言語列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
:Javaアプリケーション
:Goアプリケーション
:Pythonアプリケーション
ハイフン(-):Managed Service for OpenTelemetryで監視されているアプリケーション。
左側のナビゲーションペインで、アプリケーション設定をクリックします。表示されるページで、カスタム設定タブをクリックします。
継続的プロファイリング セクションの カスタム構成 タブで、メインスイッチ をオンにし、IP ホワイトリスト または ネットワークセグメントアドレス パラメーターを構成します。
カスタム設定タブで、保存をクリックします。
プロファイリングデータを表示する
ARMSコンソールにログインします。左側のナビゲーションペインで、 を選択します。
アプリケーションリストページで、上部ナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明言語列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
:Javaアプリケーション
:Goアプリケーション
:Pythonアプリケーション
ハイフン(-):Managed Service for OpenTelemetryで監視されているアプリケーション。
左側のナビゲーションペインで、継続的プロファイリングをクリックします。
アプリケーションインスタンスリストで、アプリケーションインスタンスを選択します。ページの右側で、期間を設定します。
右側のペインの単一ビュータブで、次の操作を実行してデータをクエリし、集計分析結果を表示します。
時間枠サイズセクション(アイコン1)で、スナップショット期間を選択し、折れ線グラフをドラッグして期間を選択します。
ドロップダウンリスト(アイコン2)から、表示するデータ(CPU、JVMヒープ、JVM GCに関するデータ)を選択します。
図のように、期間内(アイコン3)のデータが表示されます。集計分析をクリックして、スナップショットの詳細を表示できます。
比較ビュータブでは、2つの期間に生成されたデータを比較および分析できます。
ホットスポットコード機能を使用する
継続的プロファイリング機能に加えて、ホットスポットコード分析機能も有効にできます。これにより、継続的プロファイリング技術を使用して、リクエストスレッドのスタックスナップショットを定期的に収集し、コードの実行をシミュレートできます。詳細については、ホットスポットコード分析機能を使用して低速トレースを診断するを参照してください。