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

Application Real-Time Monitoring Service:Java アプリケーションのインスタンス監視

最終更新日:Aug 22, 2026

Java アプリケーションが複数のインスタンスで実行されている場合、どのインスタンスがパフォーマンスの低下やメモリプレッシャーを引き起こしているかを特定するには、インスタンスレベルの可視性が必要です。ARMS エージェントをインストールすると、ARMS はインスタンスごとにインフラストラクチャ、ガベージコレクション (GC)、および JVM メモリメトリックを自動的に収集します。[インスタンスモニタリング] ページを使用して、ツールを切り替えることなく、インスタンスの正常性を比較し、ボトルネックを特定し、メモリの問題を診断します。

前提条件

アプリケーションに ARMS エージェントがインストールされていること。

重要

アプリケーション監視は、新しい課金モードを有効にしたユーザー向けに、新しいアプリケーション詳細ページを提供します。新しい課金モードを有効にしていない場合は、[アプリケーション一覧] ページで [新バージョンに切り替える] をクリックすると、新しいアプリケーション詳細ページにアクセスできます。

インスタンス監視ページの表示

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

  2. ページ上部でリージョンを選択し、アプリケーション名をクリックします。

  3. 上部のナビゲーションバーで、[インスタンスモニタリング] をクリックします。

説明

[言語] 列のアイコンは、統合方法を示しています:

  • Java图标 アプリケーションモニタリングと統合された Java アプリケーション

  • image アプリケーションモニタリングと統合された Golang アプリケーション

  • image アプリケーションモニタリングと統合された Python アプリケーション

  • [-] Managed Service for OpenTelemetry と統合されたアプリケーション

ダッシュボードのレイアウト

[インスタンスモニタリング] ダッシュボードは、デプロイ環境 (ECS またはコンテナ) に応じて、情報を 3 つのエリアに整理します。

エリア説明
クイックフィルター (1)ホストアドレス (および Managed Service for Prometheus を使用したコンテナ環境ではクラスタ) でグラフとインスタンスリストをフィルタリングします。
トレンドグラフ (2)インフラストラクチャメトリクス、GC、および JVM メモリの時系列グラフを表示します。
インスタンスリスト (3)インスタンスごとのメトリクスを表示し、インスタンスの詳細またはトレースにアクセスします。

環境別のメトリクス

利用可能なメトリクスは、アプリケーションが ECS で実行されているか、コンテナで実行されているか、およびコンテナ環境が Managed Service for Prometheus と統合されているかどうかによって異なります。

トレンドグラフのメトリクス:

メトリクスカテゴリECSコンテナ (Prometheus)コンテナ (ARMS 自己収集)
CPU 使用率ありありあり
メモリ使用率ありありあり
ディスク使用率ありなしなし
Full GC および Young GCありありあり
ヒープメモリおよび非ヒープメモリありありあり

ECS 環境では、各インフラストラクチャグラフのタイトルの横にあるドロップダウンリストを使用して、平均値と最大値を切り替えることができます。

GC グラフでは、GC 回数と平均 GC 時間を切り替えます。JVM メモリグラフでは、ヒープメモリと非ヒープメモリのビューを切り替えます。

インスタンスリストの列:

ECSコンテナ (Prometheus)コンテナ (ARMS 自己収集)
インスタンス IPありありあり
CPU 使用率ありあり (+ request、limit)あり (使用量のみ)
メモリ使用率ありあり (+ request、limit)あり (使用量のみ)
ディスク使用率ありあり (+ limit)なし
負荷ありありあり
Full GC 回数ありありあり
Young GC 回数ありありあり
ヒープメモリ使用量ありありあり
非ヒープメモリ使用量ありありあり
RED メトリクス (リクエスト、エラー、平均応答時間)ありありあり

コンテナ (Prometheus) 環境では、リソースに制限が設定されていない場合、CPU 使用率、メモリ使用率、およびディスク使用率に [-] が表示されます。

コンテナ環境の要件:

  • Managed Service for Prometheus を使用する場合:コンテナメトリクスは Managed Service for Prometheus から取得されます。統合を設定するには、「Container Observability」をご参照ください。

  • Managed Service for Prometheus を使用しない場合:アプリケーションモニタリングプローブをバージョン 4.1.0 以降にアップグレードしてください。以前のプローブバージョンでは、基本的なコンテナメトリクスが報告されません。プローブバージョンの詳細については、「プローブ (Java Agent) バージョンガイド」をご参照ください。

グラフの操作

各トレンドグラフは、次の 2 つのアクションをサポートしています。

  • statistics をクリックして、期間のメトリクス統計を表示、または異なる日付の同じ期間を比較します。

  • toggle をクリックして、縦棒グラフとトレンドグラフを切り替えます。

インスタンスリストのアクション

  • インスタンス詳細を開くには、インスタンス IP (またはコンテナ環境の場合は [アクション] 列の [詳細]) をクリックします。

  • [アクション] 列の [トレース] をクリックして、トレース詳細を表示します。 詳細については、「トレース分析」をご参照ください。

説明

ARMS は JMX を通じて JVM メトリクスを収集します。ARMS が報告する非ヒープメモリ領域は、実際の Java プロセスのものより少なくなります。その結果、ARMS のヒープメモリと非ヒープメモリの合計は、top コマンドで表示される RES 値とは異なる場合があります。詳細については、「JVM 監視メモリの詳細」をご参照ください。

インスタンスの詳細

インスタンス IP をクリックすると、次のタブを含む詳細ページが開きます。

概要

[概要] タブには、選択されたインターフェースのリクエスト数、エラー数、平均レスポンス時間、および低速コール情報が表示されます。

左側の [ホストリスト] でホストを切り替えて、モニタリングデータを表示できます。サマリーカードには、前日比のパーセンテージ変化が表示されます。カードの下にある時系列トレンドチャートには、Requests/1mErrors/1m、および Response Time/1m が 1 分単位で表示されます。このページには、[JVM モニタリング][ホストモニタリング]、および [トレース分析] タブも含まれています。

JVM 監視

[JVM モニタリング] タブには、選択されたインスタンスの GC、メモリ、スレッド、およびファイル記述子のメトリクスが表示されます。

GC セクションには、「Full GC 回数/1分」「Young GC 回数/1分」「Full GC トリガー理由/1分」、および 「Young GC トリガー理由/1分」 のグラフが含まれています。メモリセクションには、「メモリ使用量分布/1分」「ヒープメモリ/1分」「ヒープメモリ (使用量)/1分」、およびその他のグラフが含まれています。左側のパネルでは、特定のアプリケーションインスタンスを選択して、その監視データを表示できます。

スレッドプール監視

スレッドプール監視は、コアスレッド構成、アクティブスレッドステータス、およびタスク実行メトリクスを追跡します。タブの上部でタイプと名前でスレッドプールをフィルタリングできます。

プローブバージョン 4.1.x 以降

サポートされているフレームワーク:

フレームワーククラス一般的な用途
java.util.ThreadPoolExecutorTomcat 8 ~ 9.1、Dubbo、HSF、Vert.x、カスタムスレッドプール
org.apache.tomcat.util.threads.ThreadPoolExecutorTomcat 9.1 以降
org.eclipse.jetty.util.thread.QueuedThreadPoolJetty
org.xnio.XnioWorkerUndertow

収集されるメトリクス:

メトリクスThreadPoolExecutor (JDK)ThreadPoolExecutor (Tomcat 9.1+)QueuedThreadPoolXnioWorker
arms_thread_pool_core_pool_sizeありありありあり
arms_thread_pool_max_pool_sizeありありありあり
arms_thread_pool_active_thread_countありありありあり
arms_thread_pool_current_thread_countありありあり--
arms_thread_pool_max_thread_countありあり----
arms_thread_pool_scheduled_task_countありあり----
arms_thread_pool_completed_task_countありあり----
arms_thread_pool_rejected_task_countありありあり--
arms_thread_pool_queue_sizeありありありあり

プローブバージョン 4.1.x より前

サポートされているフレームワーク:Tomcat、HSF、Dubbo、Vert.x、および Undertow。エージェントバージョン 3.1.x 以前は、Undertow 1.x ~ 2.0.x のみをサポートしています。エージェントバージョン 3.2.x 以降は、すべての Undertow バージョンをサポートしています。

メトリクス説明
arms_threadpool_core_sizeコアスレッド数
arms_threadpool_max_size最大スレッド数
arms_threadpool_active_sizeアクティブスレッド数
arms_threadpool_queue_sizeキューサイズ
arms_threadpool_current_size現在のプールサイズ

SchedulerX スレッドプールは、arms_threadpool_active_size のみを報告します。

コネクションプール監視

コネクションプール監視は、初期化構成とランタイム接続ステータスを追跡します。タブの上部でタイプでコネクションプールをフィルタリングできます。

プローブバージョン 4.1.x 以降

サポートされているフレームワーク:DBCP (>2.0)、Vibur DBCP (>11.0)、c3p0 (>0.9.2)、Druid、HikariCP (>3.0)、Jedis (>3.0)、Lettuce (>5.0)、Redisson (>3.0)、tomcat-dbcp (>8.0)、tomcat-jdbc (>8.0)。

収集されるメトリクス:

メトリクス説明サポートされているフレームワーク
arms_connection_pool_connection_count接続数 (状態別のアクティブとアイドル)DBCP、c3p0、Vibur DBCP、Druid、HikariCP、Jedis、Lettuce、Redisson、tomcat-dbcp、tomcat-jdbc
arms_connection_pool_connection_min_idle_count最小アイドル接続数 (静的設定)DBCP、Jedis、Druid、HikariCP、Lettuce、tomcat-dbcp、tomcat-jdbc
arms_connection_pool_connection_max_idle_count最大アイドル接続数 (静的設定)DBCP、Jedis、Druid、Lettuce、tomcat-dbcp、tomcat-jdbc
arms_connection_pool_connection_max_count最大接続数 (静的設定)DBCP、Druid、Vibur DBCP、HikariCP、tomcat-dbcp、tomcat-jdbc
arms_connection_pool_pending_request_countブロックされた接続リクエストc3p0、HikariCP、Jedis、tomcat-dbcp、tomcat-jdbc

プローブバージョン 4.1.x より前

フレームワーク収集されるメトリクス
okHttp2 / okHttp3arms_connection_pool_active_countarms_connection_pool_connection_count
Apache HttpClientarms_connection_pool_connection_countarms_connection_pool_max_countarms_connection_pool_pending_request_count
Druidarms_connection_pool_active_countarms_connection_pool_max_count
HikariCParms_connection_pool_active_countarms_connection_pool_max_count

ホスト監視

[ホストモニタリング] タブには、CPU、メモリ、ディスク、ロード、ネットワークトラフィック、ネットワークパケットのメトリクスが表示されます。

Host monitoring

コンテナ監視

[コンテナモニタリング] タブには、コンテナレベルのリソースメトリックが表示されます。利用できるメトリックは、統合方法によって異なります。

統合メトリクスセットアップ
Managed Service for PrometheusCPU、メモリ、ディスク、負荷、ネットワークトラフィック、ネットワークパケットPrometheus instance for Container Service」をご参照ください
ARMS 自己収集 (プローブ 4.1.0+)CPU、メモリ、ネットワークトラフィックプローブを 4.1.0 以降にアップグレードしてください。「プローブ (Java Agent) バージョンガイド」をご参照ください

[コンテナモニタリング] タブの「概要」エリアには、名前空間、クラスター、CPU (コア) とメモリの平均/最大/最新/制限に関する概要メトリクスが表示されます。その下の「リソース」エリアには、以下の 4 つの折れ線グラフが含まれています。

  • メモリ/制限 (%)

  • メモリ使用量

  • CPU 使用率 (%)

  • コア別 CPU 使用率 (ユーザー/システム/合計の曲線)

トレース分析

トレース分析は、保存されたトレースデータをリアルタイムでクエリします。フィルタと集計ディメンションを組み合わせて、さまざまなシナリオでパフォーマンスの問題を診断します。詳細については、「トレース分析」をご参照ください。

トレーシングコンソールで、serviceName: "mall-gateway" などの検索条件を入力してトレースデータをクエリします。このページには次の内容が含まれています。

  • 左側のクイックフィルタパネル:[Status][Duration] (スライダー範囲 0 ns ~ 5 s)、[Interface Name]、および [Host Address] でフィルタリングできます。

  • 上部の統計グラフ:[Call Count] ヒストグラム、[Errors/HTTP Errors] ヒストグラム、[Average Duration] 折れ線グラフ。

  • 下部スパンのデータテーブルの列には、トレース IDインターフェース名アプリケーション名期間ステータス開始時刻ホストアドレス があります。[詳細] または [ログ] をクリックすると、トレース詳細を表示できます。

  • 右側の[低速トレース分析]パネル: 所要時間への貢献度順に上位の spanName を表示します。

インスタンスレベルからアプリケーションレベルへのメトリクス集計

ARMS がインスタンスレベルのメトリクスをアプリケーションレベルの値に集計する際、メトリクスのタイプに応じて異なる方法を使用します。

メトリクスタイプ集計方法
RED:リクエスト数、低速呼び出し数、HTTP ステータスコード数合計
RED:応答時間平均
JVM:GC 回数、GC 時間合計
JVM:ヒープメモリ、スレッド数最大
スレッドプールとコネクションプール:すべてのメトリクス平均
システムメトリクス:すべてのメトリクス最大
SQL および NoSQL:呼び出し数合計
SQL および NoSQL:その他のメトリクス平均
例外:すべてのメトリクス合計

関連ドキュメント

アプリケーションモニタリングメトリクスの完全なリストについては、「Application Monitoring metrics reference」をご参照ください。

よくある質問

インスタンス間でトラフィックが不均等なのはなぜですか?

プローブバージョン 3.x では、メモリ最適化を有効にすると、一部のメトリクスが欠落する場合があります。プローブバージョン 4.x にアップグレードしてください。

単一の Undertow リクエストが 2 回カウントされるのはなぜですか?

プローブバージョン 3.2.x より前では、DeferredResult のインストルメンテーションにより、1 回の呼び出しが 2 回記録されます。プローブバージョン 3.2.x 以降にアップグレードしてください。

コンテナ監視の CPU またはメモリのクォータが Pod の設定と一致しないのはなぜですか?

Pod が複数のコンテナを定義しているかどうかを確認してください。このメトリクスは、Pod 内のすべてのコンテナのクォータの合計です。

一部のシステムメトリクスが欠落している、不正確である、または CPU 使用率が 100% と表示されるのはなぜですか?

プローブバージョン 4.x より前では、Windows でシステムメトリクスを収集しません。プローブバージョン 4.x 以降にアップグレードしてください。

アプリケーション起動直後に Full GC が発生するのはなぜですか?

デフォルトのメタスペースサイズは約 20 MB です。起動時にメタスペースが拡張され、Full GC がトリガーされます。-XX:MetaspaceSize および -XX:MaxMetaspaceSize パラメータを使用して、初期および最大メタスペースサイズを設定してください。

VM Stack はどのように計算されますか?

VM Stack は、稼働中のスレッド数に 1 MB (デフォルトのスレッドスタックサイズ) を掛けて計算されます。-Xss で異なるスタックサイズを設定した場合、このメトリクスは実際の値と一致しない可能性があります。

説明

state=live には、live、blocked、new、runnable、timed-wait、および wait の状態が含まれます。

JVM メトリクスはどのように収集されますか?

ARMS は、標準の JDK インターフェイスを使用して JVM メトリクスを取得します。

メモリメトリクス:

  • ManagementFactory.getMemoryPoolMXBeans

  • java.lang.management.MemoryPoolMXBean#getUsage

GC メトリクス (プローブ 4.4.0 より前):

  • ManagementFactory.getGarbageCollectorMXBeans

  • GarbageCollectorMXBean#getCollectionCount

  • GarbageCollectorMXBean#getCollectionTime

GC メトリクス (プローブ 4.4.0 以降):

GarbageCollectionNotificationInfo イベントを GarbageCollectorMXBean からサブスクライブすることで取得されます。

JVM の最大ヒープメモリ値が -1 なのはなぜですか?

値が -1 の場合、最大ヒープサイズが設定されていないことを意味します。-Xmx パラメータを使用して設定してください。

JVM ヒープメモリ使用量が最大ヒープメモリサイズと等しくないのはなぜですか?

-Xms パラメータは初期ヒープサイズを設定します。JVM は必要に応じてヒープを拡張し、-Xmx で設定された最大値に達します。不一致は、ヒープがまだ完全に拡張されていないことを意味します。

JVM GC の頻度が徐々に増加するのはなぜですか?

これは通常、JDK 8 のデフォルト GC アルゴリズムである ParallelGC で発生します。ParallelGC はデフォルトで -XX:+UseAdaptiveSizePolicy を有効にし、ヒープサイズを動的に調整します。Young GC が頻繁に実行されると、サバイバー領域が縮小し、オブジェクトが旧世代により早く昇格する可能性があります。これにより、旧世代の成長が加速し、より頻繁な Full GC がトリガーされます。詳細については、Java GC Ergonomics のドキュメントをご参照ください。

スレッドプールまたはコネクションプール監視のデータがないのはなぜですか?

  1. [カスタム設定]ページで、[詳細設定]で、スレッドプールと接続プールの監視が有効になっていることを確認します。

  2. Thread pool and connection pool monitoring」をご参照のうえ、お使いのフレームワークがサポート対象であることを確認してください。

HikariCP の最大接続数が期待値と一致しないのはなぜですか?

プローブバージョン 3.2.x より前では、最大接続数を正しく取得できません。プローブバージョン 3.2.x 以降にアップグレードしてください。

プール監視メトリクスが小数値として表示されるのはなぜですか?

プローブは 15 秒ごとにデータを収集します。コンソールには、選択した期間の平均値が表示されます。たとえば、1 分間の 4 つのデータポイントが 0、0、1、および 0 の場合、表示される値は 0.25 です。

スレッドプールまたはコネクションプールがいっぱいなのに、監視に変化が表示されないのはなぜですか?

ARMS は 15 秒ごとにスレッドプールとコネクションプールのメトリクスを収集します。この間隔内の短期的なスパイクはキャプチャされない場合があります。

スレッドプールの最大スレッド数が予期しない値または 21 億と表示されるのはなぜですか?

ARMS は、スレッドプールオブジェクトから最大スレッド数を直接読み取ります。21 億という値は、通常、スケジュールされたスレッドプールを示しており、デフォルトで Integer.MAX_VALUE に設定されています。

/**
 * 指定されたコアプールサイズで新しい ScheduledThreadPoolExecutor を作成します。
 * @param corePoolSize アイドル状態でもプールに保持するスレッドの数
 *        (allowCoreThreadTimeOut が設定されていない場合)
 * @throws IllegalArgumentException corePoolSize < 0 の場合
 */
public ScheduledThreadPoolExecutor(int corePoolSize) {
    super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
            new DelayedWorkQueue());
}

/**
 * 指定された初期パラメータで新しい ScheduledThreadPoolExecutor を作成します。
 * @param corePoolSize アイドル状態でもプールに保持するスレッドの数
 *        (allowCoreThreadTimeOut が設定されていない場合)
 * @param threadFactory エグゼキュータが新しいスレッドを作成する際に使用するファクトリ
 * @throws IllegalArgumentException corePoolSize < 0 の場合
 * @throws NullPointerException threadFactory が null の場合
 */
public ScheduledThreadPoolExecutor(int corePoolSize,
                        ThreadFactory threadFactory) {
    super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
            new DelayedWorkQueue(), threadFactory);
}

Tomcat スレッドプールメトリクスが期待値と一致しないのはなぜですか?

複数のメトリクス (最大スレッド数、アクティブスレッド数、コアスレッド数) がすべて期待値と異なる場合は、アプリケーションが複数のポートで Tomcat サービスを公開しているかどうかを確認してください。たとえば、Spring Actuator はメトリクス用に追加のポートを開きます。この場合、ARMS はディメンション収束により複数のスレッドプールのメトリクスをマージする可能性があります。

これを修正するには、probe をバージョン 4.1.10 以降にアップグレードします。 次に、[アプリケーション設定] > [カスタム設定] > [プーリング監視設定] に移動し、[スレッドプールのスレッド名パターンの抽出ストラテジー]Replace trailing digits with * に設定します。

特定の時刻より前にスレッドプールまたはコネクションプールのデータがないのはなぜですか?

これは、スケジュールされたタスクがプールを作成する場合に発生します。データは、タスクがプールを初期化した後にのみ表示されます。API リクエスト数などのトラフィックベースのメトリクスも同様に動作します。

HttpClient コネクションプールのデータがないのはなぜですか?

ARMS プローブバージョン 4.x 以降、OkHttp3 および Apache HttpClient のコネクションプール監視はサポートされなくなりました。これらのフレームワークは、外部ドメインごとに個別のコネクションプールを作成します。多数のドメインが関与する場合、これにより過度のオーバーヘッドと安定性のリスクが発生します。

ACK アプリケーションを統合した後、コンテナ監視データがないのはなぜですか?

ARMS は、同じ Alibaba Cloud アカウント下のリソースに対してのみコンテナ監視データを表示します。ACK クラスタの作成に使用したアカウントが、ARMS 統合に使用したアカウントと一致することを確認してください。

ファイルハンドルのオープン率がゼロ以外なのに、ファイルハンドル数がゼロなのはなぜですか?

Upgrade the ARMS agent」をご参照のうえ、プローブをバージョン 4.2.2 以降にアップグレードしてください。これは、ARMS プローブバージョン 3.x を使用して JDK 9 以降で発生します。

JVM プロセスの物理メモリ使用量が JVM 監視のヒープメモリ使用量と大きく異なるのはなぜですか?

JVM プロセスは、ARMS が完全には監視していない大量のオフヒープメモリを使用している可能性があります。ARMS がカバーする JVM メモリ領域の詳細については、「JVM 監視メモリの詳細」をご参照ください。

Druid が最大アイドル接続設定よりも多くのアイドル接続を表示するのはなぜですか?

Druid の MaxIdle パラメータは、DBCP 移行互換性のためにのみ存在します。機能的な効果はありません。

一部のインスタンスを最新のプローブバージョンにアップグレードした後、データがないのはなぜですか?

プローブバージョン 4.1.x より前からアップグレードする場合、すべてのインスタンスをアップグレードする必要があります。すべてのインスタンスが同じバージョンで実行されると、ページは自動的に適応します。