Java 仮想マシンの監視 ( JVM )

Instana を使用すれば、 Java 仮想マシン( JVM )を包括的に監視し、ボトルネックを特定してパフォーマンスを最適化することができます。 JVM を監視するには、 Instana ホストエージェントをインストールしてください。 エージェントをインストールすると、「 Instana 」 Java センサーが自動的に有効になり、リアルタイムのメトリクスやトレースデータを収集します。これらのデータは、 Instana のUIで確認できます。

Java センサーは、 対応技術向けの自動コードインスツルメンテーション、 JVM インスタンスのゼロコンフィグレーションによるヘルスモニタリング、および全システムにわたるリクエストのエンドツーエンドトレースを提供します。

補足情報

Java センサーは、以下の言語、オペレーティングシステム、およびランタイムに対応しています:

サポート対象のオペレーティング・システム

Java センサーは、ホストエージェントの要件を満たすオペレーティングシステムに対応しています。対応するオペレーティングシステムについては、各ホストエージェントの「対応オペレーティングシステム」セクションで確認できます。例: Unix の対応オペレーティングシステム

トレースに対応しているフレームワークとライブラリ

Java センサーは、トレース機能を提供するいくつかのフレームワークやライブラリを統合しています。 詳細については、 「計測用フレームワークとライブラリ」 を参照してください。 非推奨となった Java 6ランタイムについては、 「非推奨ランタイム Java 6向けの計測用フレームワークおよびライブラリ」 を参照してください

システム要件

Instana エージェントをインストールする前に、必要なシステム要件が満たされていることを確認してください。 詳細については、 「システム要件」 をご覧ください。

Instana エージェントのインストール

JVM を監視するには、 Instana ホストエージェントをインストールする必要があります。 詳細については、 「ホストエージェントのインストール」 を参照してください。 エージェントは、 Java センサーを自動的に展開、設定、およびインストールします。 Java アプリケーションに計測機能を確実に実装するには、お使いの JVM ディストリビューションがサポート対象であることを確認してください。

注: 複数のベンダーのエージェントを同時に使用しようとしないでください。 予期せぬ結果が生じ、アプリケーションの障害につながる可能性があります。 詳細については、 「互換性のないエージェント」 を参照してください。

監視対象からJVMを除外する

Instana エージェントが JVM に接続されないようにするには、 JVMtrue の環境で環境変数を INSTANA_IGNORE に設定します。

オプション:センサーの設定

Instana エージェントをインストールすると、 Java センサーが自動的にインストールされ、設定されます。 すぐに使用可能なメトリックおよび分散トレースの構成は必要ありませんが、センサーの個々のコンポーネントを構成することができます。

センサーの設定に関する詳細については、 「 Java センサーの設定」 を参照してください。

Java センサーの設定が完了すると、自動的に JVM からメトリクスの収集が開始されます。 これらの指標は、 Instana のUIで確認できます。 Java センサーは、自動トレース、カスタムトレース、自動プロファイリングなど、 Instana のその他の機能もサポートしています。

メトリック収集

Java センサーは、 JVM インスタンスを監視し、そこから以下のメトリクスを収集します:

これらのメトリックを表示するには、以下のステップを実行します。

  1. Instana のUIのサイドバーで、 「インフラストラクチャ」 を選択します。
  2. 特定のモニター対象ホストをクリックします。

JVM のダッシュボードには、 JVM インスタンスについて収集されたすべてのメトリクスが表示されます。

構成データ

次の表は、 JVM インスタンスから収集される構成データの一覧です:

構成 説明
Java バージョン JVM で使用されている Java のバージョン
Java ランタイム Java ランタイム環境(JRE)の実装
最大ヒープ JVM で利用可能な最大ヒープサイズ
クラスパス JVM で設定されたクラスパスパラメータ
JVM 引数 JVM に渡される起動オプションおよび設定パラメータ
サービス Instana によって識別および監視される論理サービス名

パフォーマンス・メトリック

JVM インスタンスから、以下のパフォーマンス指標が収集されます:

メモリーのメトリック

次の表は、 JVM におけるメモリ使用量を測定するために使用されるメモリメトリクスの概要を示しています:

パフォーマンス・メトリック 説明 データ・ソース ユニット
使用メモリー JVM が現在使用しているメモリの合計 java.lang.Runtime#totalMemory バイト数
ヒープ・メモリー JVM で利用可能な最大ヒープサイズ - 使用済みヒープメモリ: と java.lang.Runtime#totalMemoryjava.lang.Runtime#freeMemory差。 - 最大ヒープサイズ:コマンドライン引数 -Xmx を解析して決定されるか、 から取得される java.lang.Runtime#maxMemory。 - ヒープメモリ使用率:(使用済みヒープメモリ/総ヒープメモリ)×100 java.lang.Runtime 方法 バイトまたはパーセンテージ(%)
メモリー・プール 選択した期間におけるヒープおよび非ヒープ・プールのメモリ使用量をグラフで表示 ManagementFactory#getMemoryPoolMXBeans バイト数
使用中 JVM が現在使用しているヒープメモリのサイズ(使用量と使用率) java.lang.management.MemoryUsage 使用量: MiB 利用率:パーセンテージ(%)
スイミング・プール JVM が管理するメモリ領域の名前 ManagementFactory#getMemoryPoolMXBeans
幼少期 JVM の起動時に割り当てられる初期メモリサイズ getInit バイト数
最大 JVM がそのプールに割り当て可能な最大メモリサイズ getMax バイト数
現在使用中のメモリ容量 getUsage バイト数

Threadsの指標

次の表は、スレッドのメトリクスに関する情報をまとめたものです:

パフォーマンス・メトリック 説明 データ・ソース ユニット
スレッド数 選択した期間において、グラフ上に表示される異なる状態にあるスレッドの数: newrunnabletimed-waitingwaiting、または blocked java.lang.management.ThreadMXBean#getAllThreadIds
新規 作成されたがまだ開始されていないスレッドの数 ThreadMXBean#getThreadInfo
実行可能 / 実行可能な 実行可能であり、CPUによる実行の対象となるスレッドの数 ThreadMXBean#getThreadInfo
時間待ち 指定された時間待機しているスレッドの数 ThreadMXBean#getThreadInfo
待機 指定された時間待機しているスレッドの数 ThreadMXBean#getThreadInfo
ブロック済み ロックの取得を待機中にブロックされたスレッド数 ThreadMXBean#getThreadInfo

ガベージコレクション(GC)のメトリクス

次の表は、ガベージコレクションのメトリクスに関する情報をまとめたものです:

パフォーマンス・メトリック 説明 データ・ソース ユニット
ガーベッジ・コレクション 選択した期間におけるガベージコレクションの起動状況と実行時の値をグラフで表示 - ガベージコレクション情報: ManagementFactory#getGarbageCollectorMXBeans - グラフの値: java.lang.management.GarbageCollectorMXBean
PS 回収時間 Young領域におけるGCの合計時間(Eden + Survivor)(マイナーGC) getCollectionTime ミリ秒
追伸: MarkSweep の時間 旧リージョンにおけるGCの合計所要時間(メジャーGC) getCollectionTime ミリ秒
PS スカベンジの呼び出し マイナーGCの実行回数 getCollectionCount
追伸: MarkSweep からの電話 主要なGCの実行回数 getCollectionCount
注:
  • `getCollectionTime` また、 `getCollectionCount` の値は、 1‑second の区間における微分値として計算されたものです。
  • `getCollectionTime` これは、累積ガベージコレクションにかかるおおよその経過時間(ミリ秒単位)です。
  • `getCollectionCount` 呼び出し回数です。

アプリケーション・メトリック

次の表は、アプリケーションのパフォーマンス指標に関する情報をまとめたものです:

パフォーマンス・メトリック 説明 データ・ソース ユニット
停止/中断 過去1秒間に、 JVM、オペレーティングシステム、またはCPUスケジューリングに起因するアプリケーションの実行遅延が発生しました。 アプリ内の Instana 測定スレッドに基づいて計算されました。 ミリ秒

派生指標

次の表は、 JVM インスタンスから算出されるパフォーマンス指標に基づいて導出された、利用可能な指標の一覧です:

パフォーマンス・メトリック 説明 データ・ソース メトリック名
GC後のメモリ ガベージコレクション(GC)が発生した後に、アプリケーションが使用するメモリ量。 JVM センサーがガベージコレクションのグローバルな実行を報告した場合、その時点のメモリ値が「Memory After GC」の値として報告されます。 メモリ使用状況の統計とガベージコレクションのイベント memory.gc.after
GC実行前のメモリ ガベージコレクション(GC)が発生するまでに、アプリケーションが使用するメモリの量。 JVM センサーがガベージコレクションのグローバルな実行を報告した場合、「Memory Before GC」の値として、その実行直前のメモリ値が使用されます。 メモリ使用状況の統計とガベージコレクションのイベント memory.gc.before
GC後のメモリ使用率 ガベージコレクション(GC)イベント後に、アプリケーションが使用しているメモリの割合(利用可能メモリ全体に対する割合)。 これは、グローバルガベージコレクション実行後の使用中のメモリ量が、 JVM が使用した最大メモリ量に対して占める割合です。 メモリ使用量のパフォーマンス統計、最大メモリ使用量、およびガベージコレクションの統計 memory.gc.afterPercentage
GC前のメモリ使用率(%) ガベージコレクション(GC)が行われる前に、アプリケーションが使用しているメモリの割合(利用可能メモリ全体に対する割合)。 これは、グローバル・ガベージコレクションが行われる前の使用済みメモリの割合であり、 JVM が使用した最大メモリに対する割合を示しています。 メモリ使用量のパフォーマンス統計、最大メモリ使用量、およびガベージコレクションの統計 memory.gc.beforePercentage

正常性シグニチャー

各センサーには、着信メトリックに対して継続的に評価されるヘルス・シグニチャーのキュレートされた知識ベースがあります。 これらの正常性シグネチャーは、ユーザーの影響に依存する問題またはインシデントを発生させるために使用されます。

組み込みイベント は、エンティティー上の失敗したヘルス・シグニチャーに基づいて問題またはインシデントをトリガーし、 カスタム・イベント は、エンティティーの個々のメトリックのしきい値に基づいて問題またはインシデントをトリガーします。

Java センサーの組み込みイベントに関する詳細については、「 組み込みイベントのリファレンス 」を参照してください。

カスタム・メトリック

Instana 一般的な Java メトリクスライブラリの一部に対応しています。 以下のライブラリを使用している場合、アプリケーションコードに手動で計測機能を追加して、カスタムメトリクスを収集することができます:

詳細については、 「カスタムトレース」 を参照してください。

Dropwizard のメトリクスを使用した、カスタム JVM の監視

JVM が Dropwizard メトリクスライブラリを読み込むと、カスタムメトリクスが収集され、 JVM ダッシュボードに表示されます。 バックエンドが過負荷にならないようにするために、デフォルトで 200 メトリックの制限があります。

収集されるメトリクスの制限を無効にする、または変更するには、以下の設定を使用してください:

com.instana.plugin.java:
  dropwizardMetricCollection:
    enabled: false
    limit: 200
 

Dropwizard フレームワークの一環として Dropwizard のメトリクスを使用している場合は、 「 Dropwizard の監視 」を参照してください。

その他のメトリック

設定、パフォーマンス、カスタムメトリクスに加え、 Java センサーは、ライブスレッドダンプやヒープダンプなどのその他のメトリクスも収集します。

ライブ・スレッド・ダンプ

JVM のライブ・スレッド・ダンプを表示するには、「スレッド・ダンプの取得」をクリックします。

ヒープ・ダンプ

JVM のヒープ・ダンプを作成するには、「ヒープ・ダンプの取得」をクリックします。 ヒープダンプを保存するには、 JVM 内の保存先を指定してください。

Java アプリケーションのトレース

Instana の Java センサーは、 Java アプリケーションを追跡するために以下のメソッドを使用します:

  • Instana AutoTrace :手動での設定やコードの変更を必要とせずに、 Java アプリケーションのトレースを自動的に実行します。
  • カスタムトレーシング : Java アプリケーションコードの特定の部分に手動で計測コードを挿入し、カスタムメトリクスを収集して、より詳細な洞察を得る。
  • Instana AutoProfile : Java アプリケーションの自動プロファイリングにより、パフォーマンス、CPU使用率、メモリ割り当て、およびその他のシステムリソースに関する詳細な情報が得られます。

Instana AutoTrace

デフォルトでは、 Java センサーはすべてのリクエストを監視し、それぞれに対して自動的に分散トレースを作成します。 この分散トレースには、ホスト間および言語間のトレースが含まれます。 詳細については、 Instana および AutoTrace™ を参照してください。

これらのトレースは、 Instana のUIで確認できます。 詳細については、 「トレースとコールの分析」 を参照してください。

ロギング

レベル WARN 以上のログのみを表示できます。

Log4j、 Log4j2、または Logback を使用して、ロギングとトレースの相関関係をより正確に確立する場合、 Instana は自動的にトレース ID を Mapped Diagnostic Context (MDC) に設定します。 MDC 変数名は instana.trace.id です。 フォーマット・ストリングでのロギング・フレームワークの使用について詳しくは、ご使用のロギング・フレームワークの資料を参照してください。

カスタム・トレース

Java センサーは、導入直後から完全に自動化されたトレース機能を提供します。 ただし、場合によっては、 Instana のダッシュボードに独自のトレースを送信したいこともあるでしょう。 以下のメソッドを使用して、カスタム・トレースを実装できます。

構成ベースの Java トレース SDK

Java Trace SDKを使用するにはソースコードの修正が必要だったり、その作業ができる担当者に依頼したりする必要がありますが、それが現実的でない、あるいは望ましくない状況に直面することもあるでしょう。 このような場合は、 設定ベースの Java トレースSDK を使用してください。 プログラム型の Java トレースSDK ほど機能は充実していませんが、設定ベースの Java トレースSDKでは、多くの一般的なユースケースをカバーするスパンやタグを宣言的に設定することができます。

設定ベースの Java Trace SDK を使用してカスタムトレーシングを実装する前に、「 トレーシングのベストプラクティス 」を参照してください。

Java OpenTracing API

OpenTracing ( API )で記述されたトレースを収集するには、 Java ( OpenTracing )を使用する必要があります。 詳細については、 OpenTracing をご覧ください。

重要:Java OpenTracing API を使用する前に、自動トレース機能を無効にしてください( Instana AutoTrace™ )。 詳細については、 「 Java のトレース計測機能を無効にする」 を参照してください。

OpenCensus Instana トレース・エクスポーター

Instana Java で記述されたアプリケーション向けに、 OpenCensus Trace Exporter を提供します。 Instana エージェントプロセスをプロキシとして使用することで、 Instana は、Censusが組み込まれたアプリケーションからエクスポートされたトレースをバックエンドに転送します。

詳細については、「 OpenCensus のエクスポーター 」を参照してください。

重要: エージェントをCensusと同じホストで使用する場合、自動トレース機能を無効にしてください( Instana AutoTrace™ )。 詳細については、 「 Java のトレース計測機能を無効にする」 を参照してください。

Instana AutoProfile

プロファイルは、パフォーマンスのホット・スポットとボトルネックをコード・レベルで見つけるのに不可欠です。 リソース使用量の削減とパフォーマンスの向上に役立ちます。

Instana AutoProfile™ プロセスプロファイルを生成し、 Instana に報告します。 開発時やオンデマンドのプロファイラのように手動でプロファイリングを開始する必要があるのとは異なり、 AutoProfile™ は、重要な本番環境に適したプロファイリングを自動的にスケジュールし、継続的に実行します。

詳細については、 Instana および AutoProfile™ をご覧ください。

JVMを除く

JVMINSTANA_IGNORE の環境で環境変数を に true 設定することで、 Instana Agentが JVM に接続されるのを防ぐことができます。