すべてのプロダクト
Search
ドキュメントセンター

Application Real-Time Monitoring Service:メモリ診断機能を使用して、ヒープメモリの使用率の高さの診断

最終更新日:Apr 22, 2025

Application Real-Time Monitoring Service (ARMS) のメモリ診断機能は、継続的なプロファイリング技術を使用して、各スレッドがヒープメモリ割り当てをトリガーしたときに割り当てられるメモリのサイズ、メモリ割り当ての数、およびメソッドスタックスナップショットを記録し、Java 仮想マシン (JVM) のヒープメモリ使用率が高い根本原因を特定します。 JVM のヒープメモリ使用率が高い場合、この機能は、大量のヒープメモリを要求するか、大量のメモリ要求を送信するビジネスロジックメソッドを迅速に特定します。

メモリ診断機能を有効にする

  1. ARMS コンソール にログインします。左側のナビゲーションウィンドウで、[アプリケーションモニタリング] > [アプリケーションリスト] を選択します。

  2. [アプリケーションリスト] ページで、上部のナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。

    説明

    言語列に表示されるアイコンは、アプリケーションが記述されている言語を示します。

    Java图标: Java アプリケーション

    image: Go アプリケーション

    image: Python アプリケーション

    ハイフン (-): Managed Service for OpenTelemetry で監視されるアプリケーション。

  3. 左側のナビゲーションウィンドウで、[アプリケーション設定] をクリックします。表示されるページで、[カスタム設定] タブをクリックします。

  4. 継続的プロファイリングセクションで、[メインスイッチ][メモリホットスポット] をオンにして、アプリケーションインスタンスの IP アドレスまたは複数のインスタンスの CIDR ブロックを設定します。

  5. タブの下部にある [保存] をクリックします。

    変更は、アプリケーションを再起動する必要なく有効になります。

継続的プロファイリング技術を使用して [ホットスポットメモリデータ] を表示する

次の例は、1 秒あたり 1 MB のヒープメモリを要求するメソッドを示しています。

public class FixedRateAllocAction {

    // 要求メソッド
   public void runBusiness() {
        try {
            sink = new byte[1024];
        } catch (InterruptedException e) {
            // 無視
        }
    }
}
  1. ARMS コンソール にログインします。左側のナビゲーションウィンドウで、[アプリケーションモニタリング] > [アプリケーションリスト] を選択します。

  2. [アプリケーションリスト] ページで、上部のナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。

    説明

    言語 列に表示されるアイコンは、アプリケーションが記述されている言語を示します。

    Java图标: Java アプリケーション

    image: Go アプリケーション

    image: Python アプリケーション

    ハイフン (-): Managed Service for OpenTelemetry で監視されるアプリケーション。

  3. 左側のナビゲーションウィンドウで、[継続的プロファイリング] をクリックします。 [継続的プロファイリング] ページで、表示するインスタンスとクエリする期間を選択します。

  4. [シングルビュー] タブで、データをクエリし、集約分析結果を表示できます。

    image

  5. [集約と分析] をクリックします。表示されるページで、[プロファイリングタイプ] パラメーターを [割り当てられたメモリ] に設定します。

    説明

    次のパフォーマンス分析タイプを使用できます。

    • CPU 時間: 要求された CPU コアの数。詳細については、「CPU 診断機能を使用して高い CPU 使用率を診断する」をご参照ください。

    • 割り当てられたメモリ: 要求されたメモリのサイズ。

    • 割り当て: メモリ要求の数。メモリ要求の数に基づいて、頻繁にメモリを要求するメソッドを表示できます。

    image

    図の左側は、呼び出しに関係するすべてのメソッドのヒープメモリ使用量リストであり、右側はすべてのメソッド情報のフレームグラフです。

    • Self 列には、スタック内で各メソッドが消費する時間またはリソースが表示されます。子メソッドが消費する時間またはリソースは含まれません。このデータを使用して、過剰な時間またはリソースを費やしているメソッドを特定できます。

    • Total 列には、各メソッド自体に消費された時間またはリソースが表示されます。すべての子メソッドに消費された時間またはリソースが含まれます。このデータを使用して、最も多くの時間またはリソースを費やしているメソッドを特定できます。

    前の図に基づいて、次の分析を実行します。

    1. Self 列の値を昇順に並べ替えます。最大値を持つメソッド com.alibaba.cloud.pressure.memory.FixedRateAllocAction.runBusiness() を見つけてクリックします。関連するメソッドがフレームグラフに表示されます。

      image

    2. フレームグラフのスタックトップで、com.alibaba.cloud.pressure.memory.FixedRateAllocAction.runBusiness() メソッドのボックスが最も広いことがわかります。

    3. com.alibaba.cloud.pressure.memory.FixedRateAllocAction.runBusiness() はアプリケーションで定義された最初のサービスメソッドであるため、指定された期間に com.alibaba.cloud.pressure.memory.FixedRateAllocAction.runBusiness() メソッドが大量のリソースを消費していると結論付けることができます。このメソッドを使用して、関連メソッドのロジックを分析し、最適化できるかどうかを確認できます。

上記の分析は、com.alibaba.cloud.pressure.memory.FixedRateAllocAction.runBusiness() メソッドが 1 分間に 56.56 MB のメモリを要求していることを示しており、これはサンプルシナリオと論理的に一致します。

参照

継続的プロファイリング機能を使用する場合: