Application Real-Time Monitoring Service (ARMS) の CPU 診断機能は、継続的なプロファイリング技術を使用して、実行中の CPU スレッドのメソッドスタックスナップショットを定期的に収集し、高 CPU 使用率の根本原因を特定します。 システムの CPU 使用率が高い場合、この機能は、高 CPU 使用率を引き起こしているビジネスロジックメソッドを迅速に特定します。
CPU 診断機能を有効にすると、CPU オーバーヘッドが約 5% 増加します。 事前に一定量の利用可能なリソースを確保しておく必要があります。
CPU 診断機能を有効にする
ARMS console にログインします。 左側のナビゲーションウィンドウで、 を選択します。
[アプリケーションリスト] ページで、上部のナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明[言語] 列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
: Java アプリケーション
: Go アプリケーション
: Python アプリケーションハイフン ([-]): Managed Service for OpenTelemetry で監視されるアプリケーション。
左側のナビゲーションウィンドウで、[アプリケーション設定] をクリックします。 表示されるページで、[カスタム設定] タブをクリックします。
[継続的プロファイリング] セクションで、[メインスイッチ] と [CPU ホットスポット] をオンにして、アプリケーションインスタンスの IP アドレス、または複数のインスタンスの CIDR ブロックを構成します。
タブの下部にある [保存] をクリックします。
変更は、アプリケーションを再起動しなくても有効になります。
継続的プロファイリング技術を使用して ホットスポット CPU データ を表示する
次の例は、CPU リソースを消費し、500 ミリ秒間実行されるメソッドを示しています。
public class CPUPressure {
// リクエストメソッド
public void runBusiness() {
long start = System.currentTimeMillis(), period = 0;
while (period <= 500L) {
period = System.currentTimeMillis() - start;
}
}
}ARMS console にログインします。 左側のナビゲーションウィンドウで、 を選択します。
[アプリケーションリスト] ページで、上部のナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明[言語] 列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
: Java アプリケーション
: Go アプリケーション
: Python アプリケーションハイフン ([-]): Managed Service for OpenTelemetry で監視されるアプリケーション。
左側のナビゲーションウィンドウで、[継続的プロファイリング] をクリックします。 継続的プロファイリングページで、表示するインスタンスとクエリする期間を選択します。
[シングルビュー] タブでは、データをクエリし、集約分析結果を表示できます。
説明次のパフォーマンス分析タイプを使用できます。
CPU Time: 要求された CPU コア数。
Allocated Memory: 要求されたメモリサイズ。
Allocations: メモリ要求数。 メモリ要求数に基づいて、頻繁にメモリを要求するメソッドを表示できます。

集計と分析プロファイリングの種類CPU時間 をクリックします。 表示されるページで、 パラメーターを に設定します。

図の左側は、呼び出しに関係するすべてのメソッドの CPU 使用率リストで、右側はすべてのメソッド情報のフレームグラフです。
Self 列には、スタック内で各メソッドが消費する時間またはリソースが表示されます。子メソッドが消費する時間またはリソースは含まれません。 このデータを使用して、自身のために過剰な時間またはリソースを費やしているメソッドを特定できます。
Total 列には、各メソッド自体に消費された時間またはリソースが表示されます。すべての子メソッドに消費された時間またはリソースが含まれます。 このデータを使用して、最も多くの時間またはリソースを費やしているメソッドを特定できます。
前の図に基づいて、次の分析を実行します。
Self 列の値を昇順に並べ替えます。 最大値を持つメソッド java.lang.System.currentTimeMillis() を見つけてクリックします。 関連するメソッドがフレームグラフに表示されます。

java.lang.System.currentTimeMillis() メソッドは、フレームグラフのスタックトップで最も幅の広いボックスを持っていることがわかります。
java.lang.System.currentTimeMillis() メソッドは Java 開発キット (JDK) のライブラリ関数であるため、さらに上に検索する必要があります。 java.lang.System.currentTimeMillis() メソッドとその親メソッド com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness() を見つけることができます。 アプリケーションで定義された最初のサービスメソッドとして、com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness() メソッドは 28.63 秒を消費し、スタックの 91.44% を占めています。 したがって、com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness() メソッドが指定された期間に大量のリソースを消費するという結論を導き出すことができます。 このメソッドを使用して、関連メソッドのロジックを分析し、最適化できるかどうかを確認できます。
上記の分析は、com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness() メソッドが 1 分間に 28.63 秒かかることを示しており、これはサンプルシナリオと論理的に一致します。
参照
継続的プロファイリング機能を使用する場合:
以下の内容を参照して、低速の呼び出しと CPU 使用率が高い問題のトラブルシューティングを行います。
一般的な問題 のトラブルシューティング。