Java 仮想マシンの監視 ( JVM )
Instana を使用すれば、 Java 仮想マシン( JVM )を包括的に監視し、ボトルネックを特定してパフォーマンスを最適化することができます。 JVM を監視するには、 Instana ホストエージェントをインストールしてください。 エージェントをインストールすると、「 Instana 」 Java センサーが自動的に有効になり、リアルタイムのメトリクスやトレースデータを収集します。これらのデータは、 Instana のUIで確認できます。
Java センサーは、 対応技術向けの自動コードインスツルメンテーション、 JVM インスタンスのゼロコンフィグレーションによるヘルスモニタリング、および全システムにわたるリクエストのエンドツーエンドトレースを提供します。
補足情報
Java センサーは、以下の言語、オペレーティングシステム、およびランタイムに対応しています:
サポート対象言語
このセンサーは以下の言語に対応しています:
- Clojure
- Java
- Kotlin
- Scala
サポート対象のオペレーティング・システム
Java センサーは、ホストエージェントの要件を満たすオペレーティングシステムに対応しています。対応するオペレーティングシステムについては、各ホストエージェントの「対応オペレーティングシステム」セクションで確認できます。例: Unix の対応オペレーティングシステム。
Java の対応ディストリビューションおよびランタイム
サポートされている Java のディストリビューションおよびランタイムに関する情報は、 「サポートされている JVM のディストリビューション」 を参照してください。
トレースに対応しているフレームワークとライブラリ
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 インスタンスを監視し、そこから以下のメトリクスを収集します:
これらのメトリックを表示するには、以下のステップを実行します。
- Instana のUIのサイドバーで、 「インフラストラクチャ」 を選択します。
- 特定のモニター対象ホストをクリックします。
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#totalMemory の java.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の指標
次の表は、スレッドのメトリクスに関する情報をまとめたものです:
| パフォーマンス・メトリック | 説明 | データ・ソース | ユニット |
|---|---|---|---|
| スレッド数 | 選択した期間において、グラフ上に表示される異なる状態にあるスレッドの数: new、 runnable、 timed-waiting、 waiting、または 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
Instana でまだサポートされていないフレームワークに計測機能を追加したい場合や、カスタムアプリケーションのリクエストを監視したい場合は、 Java Trace SDK を使用し、 GitHub リポジトリを参照してください。
SDK を使用してカスタムトレースを実装する前に、 トレースのベストプラクティスを確認してください。
構成ベースの Java トレース SDK
Java Trace SDKを使用するにはソースコードの修正が必要だったり、その作業ができる担当者に依頼したりする必要がありますが、それが現実的でない、あるいは望ましくない状況に直面することもあるでしょう。 このような場合は、 設定ベースの Java トレースSDK を使用してください。 プログラム型の Java トレースSDK ほど機能は充実していませんが、設定ベースの Java トレースSDKでは、多くの一般的なユースケースをカバーするスパンやタグを宣言的に設定することができます。
設定ベースの Java Trace SDK を使用してカスタムトレーシングを実装する前に、「 トレーシングのベストプラクティス 」を参照してください。
Java OpenTracing API
OpenTracing ( API )で記述されたトレースを収集するには、 Java ( OpenTracing )を使用する必要があります。 詳細については、 OpenTracing をご覧ください。
OpenCensus Instana トレース・エクスポーター
Instana Java で記述されたアプリケーション向けに、 OpenCensus Trace Exporter を提供します。 Instana エージェントプロセスをプロキシとして使用することで、 Instana は、Censusが組み込まれたアプリケーションからエクスポートされたトレースをバックエンドに転送します。
詳細については、「 OpenCensus のエクスポーター 」を参照してください。
Instana AutoProfile
プロファイルは、パフォーマンスのホット・スポットとボトルネックをコード・レベルで見つけるのに不可欠です。 リソース使用量の削減とパフォーマンスの向上に役立ちます。
Instana AutoProfile™ プロセスプロファイルを生成し、 Instana に報告します。 開発時やオンデマンドのプロファイラのように手動でプロファイリングを開始する必要があるのとは異なり、 AutoProfile™ は、重要な本番環境に適したプロファイリングを自動的にスケジュールし、継続的に実行します。
詳細については、 Instana および AutoProfile™ をご覧ください。
JVMを除く
JVMINSTANA_IGNORE の環境で環境変数を に true 設定することで、 Instana Agentが JVM に接続されるのを防ぐことができます。
トラブルシューティング
Instana では、監視に関する問題が発生する可能性があります。 詳細については、「トラブルシューティング」を参照してください。