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

Instana を使用して Java 仮想マシン (JVM) を包括的に監視し、ボトルネックを特定してパフォーマンスを最適化できます。 JVM を監視するには、Instana ホストエージェントをインストールします。 エージェントをインストールすると、Instana Java センサーが自動的にアクティブになり、Instana UI で表示できるリアルタイムのメトリクスとトレースデータを収集します。

Javaセンサーは、 サポートされているテクノロジーの自動コード・インスツルメンテーション、JVMインスタンスのゼロ・コンフィギュレーション・ヘルス・モニタリング、全システムにわたるリクエストのエンド・ツー・エンドのトレースを提供する。

サポート情報

Javaセンサーは以下の言語、オペレーティングシステム、ランタイムをサポートしています:

サポート対象言語

センサーは以下の言語をサポートしています:

  • Clojure
  • Java
  • Kotlin
  • Scala

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

Javaセンサーは、ホストエージェントの要件と一致するオペレーティングシステムをサポートしています。これは、各ホストエージェントのSupported operating systemsセクションで確認できます。

トレース用にサポートされているフレームワークとライブラリ

Javaセンサーには、トレース用のフレームワークやライブラリーがいくつか用意されている。 詳しくは、 インスツルメンテッド・フレームワークとライブラリを参照のこと。 非推奨のJava 6ランタイムについては、 非推奨ランタイムJava 6用のインスツルメンテッド・フレームワークとライブラリを参照

システム要件

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

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

JVM を監視するには、Instana ホストエージェントをインストールする必要があります。 詳細については、 ホストエージェントのインストールを参照してください。 エージェントは自動的にJavaセンサーを配置、設定、インストールする。 Javaアプリケーションがインスツルメンテーションされていることを確認するには、 JVMディストリビューションがサポートされていることを確認してください。

注意: 複数のベンダーのエージェントを同時に使用しようとしないでください。 予期せぬ結果に見舞われ、アプリケーションが失敗する可能性があります。 詳細は、 互換性のないエージェントを参照。

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

Instana エージェントが JVM にアタッチされないようにするには、JVM 環境で環境変数 INSTANA_IGNORE 環境変数を true に設定します。

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

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

センサーの設定については、 Javaセンサーの設定を参照してください。

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

メトリック収集

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

これらのメトリクスを表示するには、以下の手順を実行します:

  1. Instana UI のサイドバーで、 インフラストラクチャを選択します。
  2. 特定の監視ホストをクリックします。

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

構成データ

次の表は、JVMインスタンスから収集されるコンフィギュレーション・データの一覧である:

構成 説明
Java バージョン Java のバージョン。
Java ランタイム Java ランタイム環境 (JRE)。
最大ヒープ JVM に使用可能な最大ヒープ・サイズ。
クラスパス JVMに設定されているクラス・パス・パラメーター。

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

次の表は、JVMインスタンスから収集されるパフォーマンス・メトリクス・データの一覧です:

パフォーマンス・メトリック 説明 データ・ポイント
使用メモリー JVM によって使用される合計メモリー。 測定された現行の KPI 値が表示されます。 バイト数は java.lang.Runtime#totalMemory から収集される。
スレッド数 異なる状態にあるスレッドの数: new runnable, timed-waiting, waiting, または blocked. 選択された期間にわたる値がグラフに表示されます。 - 現在のスレッドIDは java.lang.management.ThreadMXBean#getAllThreadIds から収集される。 - スレッド状態は ThreadMXBean#getThreadInfo から収集される。
ヒープ・メモリー JVM に使用可能な最大ヒープ・サイズ。 - バイト数は、 java.lang.Runtime#totalMemory - java.lang.Runtime#freeMemory として計算される。 - グラフに表示される最大ヒープ・サイズは、 -Xmx コマンドライン・パラメータを解析して決定されるか、または java.lang.Runtime#maxMemory から収集される。
メモリー・プール ヒーププールと非ヒーププールのメモリプール使用量が、選択した期間にわたってグラフ表示される。 - プール情報は ManagementFactory#getMemoryPoolMXBeans から収集される。 - グラフ値は、各プール java.lang.management.MemoryUsage から収集される。 - 最大値は getMax から、初期値は getInit から、現在値は getUsage から収集される。
ガーベッジ・コレクション 選択した期間のガーベッジ・コレクションのアクティブ化とランタイム値がグラフに表示されます。 - ガベージコレクション情報は ManagementFactory#getGarbageCollectorMXBeans から収集される。 - グラフ値は各コレクタから収集される java.lang.management.GarbageCollectorMXBean。 - ガベージコレクションの実行時間は、 getCollectionTime から収集される。これは、Javadocによると、累積ガベージコレクションのおおよその経過時間(ミリ秒)である。 - 呼び出し回数は getCollectionCount から収集される。 - getCollectionTimegetCollectionCount の値はどちらも、1秒間の計算された差分である。
中断 選択された期間にわたってグラフに表示されるアプリケーション実行の遅延。 アプリ内のInstana測定スレッドに従って計算。

派生メトリクス

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

パフォーマンス・メトリック 説明 メトリック名
GC後のメモリ ガベージコレクション(GC)イベント発生後にアプリケーションが使用するメモリ量。 メモリ使用量の統計とガベージコレクション・イベントがこの値を決定する。 JVMセンサーがガベージ・コレクションのグローバルな呼び出しを報告すると、その時点のメモリ値が、GC後のメモリ値を報告するために使用される。 memory.gc.after
GC前のメモリ ガベージコレクション(GC)イベントが発生するまでにアプリケーションが使用するメモリの量。 メモリ使用量の統計とガベージコレクション・イベントがこの値を決定する。 JVMセンサーがガベージ・コレクションのグローバルな呼び出しを報告するとき、この呼び出しの前のメモリ値が、GC前のメモリ値を報告するために使用されます。 memory.gc.after
GC後のメモリの割合 ガベージコレクション(GC)イベント後にアプリケーションが使用する、使用可能な総メモリの割合を示す指標。 メモリ使用量パフォーマンス統計、最大使用メモリ、およびガベージコレクション統計が、この値を導き出すために使用される。 Memory After GC Percentageは、JVMが使用した最大メモリーに対する、グローバル・ガベージ・コレクション後の使用メモリーの割合です。 memory.gc.afterPercentage
GC前のメモリの割合 ガベージコレクション(GC)イベントが発生する前にアプリケーションが使用する、使用可能な総メモリの割合を示す指標。 メモリ使用量パフォーマンス統計、最大使用メモリ、およびガベージコレクション統計が、この値を導き出すために使用される。 Memory Before GC Percentageは、JVMが使用した最大メモリーに対する、グローバル・ガベージ・コレクションの前に使用されたメモリーのパーセンテージです。 memory.gc.beforePercentage

正常性シグニチャー

各センサーは、入力されるメトリクスに対して継続的に評価される健康シグネチャのキュレーションされた知識ベースを持っています。 これらのヘルスシグネチャは、ユーザーの影響に依存する問題やインシデントを提起するために使用される。

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

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

カスタム・メトリック

Instana は、いくつかの一般的な Java メトリクス・ライブラリをサポートしています。 以下のライブラリを使用すると、アプリケーション・コードを手動で計測してカスタム・メトリクスを収集できます:

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

カスタムJVMモニタリングのためのDropwizardメトリクスの使用

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 は、マップされた診断コンテキスト (MDC) にトレース ID を自動的に入力します。 MDC 変数名は instana.trace.id です。 フォーマット文字列でロギングフレームワークを使用する方法の詳細については、ロギングフレームワークのドキュメントを参照してください。

カスタム・トレース

Javaセンサーは、完全に自動化された、すぐに使えるトレース・インスツルメンテーションを提供します。 しかし、場合によっては、カスタムトレースをInstanaダッシュボードに送信することを好むかもしれません。 以下のメソッドを使用して、カスタムトレースを実装することができます:

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

JavaトレースSDKを使用するには、ソースコードを操作するか、それができる誰かに連絡する必要がありますが、実行不可能または望ましくない状況に遭遇する可能性があります。 このような場合は、 コンフィギュレーション・ベースのJava Trace SDKを使用する。 プログラム的な Java Trace SDKより機能は少ないが、コンフィギュレーションベースのJava Trace SDKは、多くの一般的なユースケースをカバーするスパンとタグの宣言的なコンフィギュレーションを可能にする。

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

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

Instana は、Java で記述されたアプリケーション用に OpenCensus Trace Exporter を提供しています。 Instana エージェントプロセスをプロキシとして使用することで、Instana は、Census でインスツルメンテーションされたアプリケーションによってエクスポートされたトレースをバックエンドに転送します。

詳細は OpenCensus Exportersを参照。

エージェントが国勢調査と同じホストで使用されている場合、自動トレース (Instana AutoTrace™ ) を無効にします。 詳細については、[Java Trace instrumentationを無効にする](../... /ecosystem/jvm/configuration.html #disabling-java-trace-instrumentation) を参照してください。

インスタナ AutoProfile

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

Instana AutoProfile™ プロセスプロファイルを生成し、Instana に報告します。 手動でプロファイリングを開始しなければならない開発時やオンデマンドのプロファイラとは異なり、 AutoProfile™ は、クリティカルな本番環境に適したプロファイリングを自動的にスケジュールし、継続的に実行します。

詳しくは、 Instana AutoProfile™ をご覧ください。

JVMを除く

JVM 環境で INSTANA_IGNORE 環境変数を true に設定すると、Instana Agent の JVM へのアタッチを回避できます。