インスタンスの性能管理
ホーム画面 > プロジェクト選択 > インスタンス性能管理
アプリケーションの環境を確認し、性能に関連する設定を確認できます。 エージェントおよびアプリケーションに関する詳細情報を確認できます。
-
右上のテキスト入力欄から希望する項目がフィルタリングできます。
-
モニタリング対象サーバーに位置するエージェントおよびアプリケーションの変更が自動的に反映されない場合は、
リフレッシュボタンを選択します。
エージェントリスト
画面左側のアプリケーション一覧では、プロジェクトに割り当てられたエージェントの一覧を確認できます。 個々のエージェント項目を選択すると、右画面に、設定された環境変数、エージェント設定及びに性能に関する情報を照会できます。

エージェント一覧を更新するか、非活性化されたエージェントを再起動しても一覧に自動的に表示されない場合は、ボタンを選択します。
実行環境変数
ホーム画面 > プロジェクト選択 > インスタンス性能管理 > 実行環境変数

エージェントの実行に関連する環境変数を照会できます。 環境変数のうち、重要な情報またはアプリケーションの状態情報をWhaTapサーバーに保存し、エージェントがダウンしても照会が可能です。 エージェントバージョンやインストールパス、名前、IPアドレスなどを確認できます。 CSVボタンをクリックすると、環境変数情報をダウンロードできます。 主な確認事項は次のとおりです。
-
(アプリケーション).version: アプリケーションのバージョンを確認できます。 -
file.encoding:utf-8といったファイルエンコーディング形式を確認できます。 -
os.name: OSを確認できます。 -
user.language: ユーザー言語を確認できます。
-
-Xms,-Xms: ヒープメモリ設定に関連する環境変数を確認できます。 -
(アプリケーション).start: アプリケーションの開始時間を確認できます。
環境変数
ホーム画面 > プロジェクト選択 > インスタンス性能管理 > 環境変数

アプリケーションの実行に関連する環境変数情報を照会できます。 環境変数メニューは、照会時点の環境変数情報を収集して提供します。 System.getProperty()を使用して、パラメータとして渡されたキーの値を照会します。 主な確認事項は次のとおりです。
-
(アプリケーション).version: アプリケーションのバージョンを確認できます。 -
file.encoding:utf-8といったファイルエンコーディング形式を確認できます。
- アプリケーションステータス情報: 例えば
catalina.home環境変数が照会される場合、tomcat環境であることが把握できます。
- OS環境変数: 例えば
(env) LANG環境変数のように接尾辞(env)形式で提供されます。
ヒープヒストグラム
ホーム画面 > プロジェクト選択 > インスタンス性能管理 > ヒープヒストグラム

JVM(Java仮想マシン)のメモリにロードされているヒープ占有オブジェクトの状況(ヒープメモリ上のオブジェクト別サイズ)を照会することができます。 つまり、オブジェクトそのもののサイズを照会します。 数カラムを通じて主要オブジェクトの数を確認することが容易です。
JVMオプション
Java 6~8バージョンでは、JVMオプションなしで標準対応しますが、一部のJavaバージョンによっては次のようにJVMオプションを適用する必要があります。
-
Java 9 ~ Java 15バージョン
-Djdk.attach.allowAttachSelf=trueexamplejava -javaagent:{WHATAP_HOME}/whatap.agent-X.Y.Z.jar -Djdk.attach.allowAttachSelf=true -jar {application.jar} -
Java 16バージョン以降
-Djdk.attach.allowAttachSelf=true
--add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMEDexamplejava -javaagent:{WHATAP_HOME}/whatap.agent-X.Y.Z.jar -Djdk.attach.allowAttachSelf=true --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED -jar {application.jar} -
Java 5以前の旧バージョン、IBM Javaには対応していません。
GC前まで維持されるオブジェクトの数を照会するため、実際に使用されていなくても、該当一覧には表示されます。 正確な照会のためにシステムGC実行後にその一覧を確認することをお勧めします。 システムGCについては、次の文書を参照してください。
ロード済クラス
ホーム画面 > プロジェクト選択 > インスタンス性能管理 > ロード済クラス

Javaアプリケーションにロードされたクラス情報を確認できます。 ロード済クラスメニューを通じてアプリケーションでロードされたクラスリストと関連詳細データを照会し、中断なくクラスの動作を変更できま す。
-
クラス詳細: 照会カラムで
アイコンをクリックするとクラス詳細を確認できます。 クラス詳細は、クラス内のメソッド及び継承関係情報を提供します。
-
再定義: 再定義カラムで
アイコンをクリックすると、そのクラスを再定義できます。 ランタイムに既にロードされたクラスを再びロードした後、バイトコード挿入(BCI)を通じてアプリケーションを中断することなく、該当クラスの動作変更が可能です。
-
リソース: そのクラスが物理的にどのファイルからロードされたかを確認できます。 アプリケーションの複雑な多階層構造の特性上、クラスが正確にどのjarファイルからロードされたかを把握するリソース情報の確認が必要です。
再定義機能とリソース情報確認活用の詳細は、次の文書を参照してください。
BCI(ByteCode Instrumentation)
Javaバイトコードは、プラットフォームに独立的な中間コードでJVMで実行されます。 BCIつまり、バイトコード挿入は、ソースファイルの修正なしでランタイムまたはビルドタイムにバイトコードを動的に変更して追加機能を実装する技術です。 詳細については、次の文書を参照してください。
ライブラリバージョン
ホーム画面 > プロジェクト選択 > インスタンス性能管理 > ライブラリバージョン

Javaアプリケーションに 配布されたコンポーネントのリストを照会できます。 オープンソースライブラリを多く使用する環境では、jarファイルのバージョン情報を確認し、互換性の問題を迅速に識別して解決できます。 また、バージョン情報の確認は、セキュリティの脆弱性があるバージョンを見つけてパッチするなど、セキュリティ管理にも容易です。
-
コンポーネント一覧情報: 当該jarファイルの名前及びバージョン情報を詳細で提供します。
-
CSV: ダウンロードボタンをクリックして、バージョン情報をダウンロードできます。
スレッドリスト/ダンプ
ホーム画面 > プロジェクト選択 > インスタンス性能管理 > スレッドリスト/ダンプ

Javaプロセス内のすべてのスレッド状態のスナップショット情報を提供します。 スレッドリスト/ダンプはCPU最適化作業において重要なメニューです。 プロセスではなくスレッド単位で状態を確認することで、CPUリソースをより細かく管理できます。 例えば、照会時点でCPUを最も多く使用しているスレッドを特定した後、該当スレッドのスタック情報を確認して性能問題を識別できます。
-
スレッドステータス: 全体スレッド数およびRUNNABLE、WAITING状態のスレッド数を一覧の上段にある状況要約で確認できます。
-
スレッドダンプ: 上段右側の
スレッドダンプボタンをクリックして、全体のスレッドダンプを作成できます。 スレッド全体のダンプを作成した後、スレッド一覧の下段でその情報を確認できます。 -
個別スレッドダンプ: 各スレッドごとに
アイコンを選択すると、個々のスレッドダンプ情報を確認できます。 スタック及びスタックトレースで、スレッドの状態と実行パスに関する詳細及びスタックトレースを照会できます。
更新して確認できます。 詳細については次の文書を参照してください。
-
スレッドCPU時間: 該当スレッドがCPUを占有した累積時間を意味します。 ミリ秒単位の時間を使用します。
-
増加量: スレッドリストの上段で
更新アイコンをクリックすると、既存のスレッドのCPU時間と現在のスレッドのCPU時間の差値が追加されます。
スレッドCPU時間は、当該スレッドがCPUを占有した総累積時間であるため、照会時点で最も多くCPUを使用しているスレッドを特定するためには増加量値の確認が必要です。 詳細については、次の文書を参照してください。
CPU使用量急増タイプ
-
ヒープメモリがいっぱいの場合: 頻繁なGCによりCPU使用量が急増
-
実際のリクエストが多い場合: 大量のクライアントリクエスト処理によりCPU使用量が急増
-
誤ったコードロジック: 非効率的なアルゴリズムや無限ループによりCPU使用量が急増
スレッドダンプの詳細
スレッドリスト/ダンプメニューで確認できる個々のスレッドダンプ情報について案内します。
JVMオプション
スレッドダンプ機能を各Javaバージョンごとに使用するためには、追加のJVMオプション設定が必要です。
Java 6~8バージョンでは、JVMオプションなしで標準対応しますが、一部のJavaバージョンによっては次のようにJVMオプションを適用する必要があります。
-
Java 9 ~ Java 15バージョン
-Djdk.attach.allowAttachSelf=trueexamplejava -javaagent:{WHATAP_HOME}/whatap.agent-X.Y.Z.jar -Djdk.attach.allowAttachSelf=true -jar {application.jar} -
Java 16バージョン以降
-Djdk.attach.allowAttachSelf=true
--add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMEDexamplejava -javaagent:{WHATAP_HOME}/whatap.agent-X.Y.Z.jar -Djdk.attach.allowAttachSelf=true --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED -jar {application.jar} -
Java 5以前の旧バージョン、IBM Javaには対応していません。
スレッド状態
スレッドの状態は、java.lang.Threadクラス内にStateという名前のEnumerated Types(列挙型)と宣言された項目です。
-
NEW:スレッドは作成されましたが、まだ実行されていません。 -
RUNNABLE:現在CPUを占有し、作業を行っている状態です。 OSのリソース分配によりWAITING状態になる可能性があります。 -
WAITING:wait()、join()、park()メソッドなどを利用して待機している状態です。 -
TIMED_WAITING:sleep()、wait()、join()、park()メソッド等を用いて待機している状態、WAITING状態と異なる点は、与えられた時間に待機している状態です。 外部的な変化だけでなく、時間によっても待機状態が解除されることがあります。 -
BLOCKED:使用する オブジェクトのロック(Lock)が解除されるまで待機している状態です。 -
TERMINATED:実行済みの状態です。
スレッドダンプ情報
スレッド一覧で各スレッドのボタンをクリックすると、個別スレッドダンプ情報を確認できます。

スタック
| 項目 | プロパティ | 説明 |
|---|---|---|
| スレッドID | threadId | スレッドに割り当てられた固有ID |
| ロック所有者ID | lockOwnerId | スレッドがブロックされたオブジェクトのモニター(Monitor)のロックを維持するスレッドのID |
| 待ち件数 | waitedCount | スレッドがWAITINGまたはTIMED_WAITING状態になった総回数 |
| ブロック数 | blockedCount | スレッドがBLOCKED状態になった総回数 |
| 待ち時間 | waitedTime | スレッドがWAITING状態を継続した経過時間(ミリ秒)、スレッドの競合モニタリングが非活性化された 場合は-1を返す |
| スレッドCPU時間 | threadCpuTime | スレッドのCPU時間合計(ナノ秒)をミリ秒で計算して表示、CPU時間測定を非活性化した場合は-1を返す |
| ステータス | threadstate | スレッド状態 |
| ブロック時間 | blockedTime | スレッドがBLOCKED状態になってからの経過時間(ミリ秒)、スレッドの競合モニタリングが非活性化された場合は-1を返す |
| スレッド名 | threadName | スレッドの固有名 |
| ロック名 | lockName | スレッドの入力がブロックされたりObject.waitメソッドを介して通知を待つモニターロックを表示する文字列 |
| ロック所有者名 | lockOwnerName | スレッドがブロックされるオブジェクトのモニターロックを受け入れるスレッド名 |
| スレッドユーザー時間 | threadUserTime | スレッドがユーザーモードで実行したCPU時間(ナノ秒)をミリ秒で計算して表示 |
スレッド情報の詳細については次のリンクを参考にしてください。
スタックトレース
例外が発生した時のスタック(Stack) 追跡を表示します。 スタックフレーム一覧には、コードが呼び出したメソッド情報が含まれています。
AI スレッド分析
スレッドダンプ詳細画面で スレッド分析 ボタンをクリックします。
AI による分析結果はドロワー形式で表示されます。
分析結果項目
- サマリー
- 総スレッド数
- スレッド状態別の分布
- 問題点
- 推奨事項
スレッド分析の再試行
ドロワー上部の ボタンをクリックすると、同じスレッドダンプを再分析できます。
分析結果は WhaTap ページで設定された言語で表示されます。
一部の場合、英語で表示されることがあります。
プロジェクトごとに1日最大20回まで分析でき、プロジェクトのタイムゾーンを基準に毎日00:00:00にリセットされます。
- 分析回数の消費基準
- 新しいスレッドダンプを分析する場合、1 回分消費されます
- アプリケーション選択状態が変更された場合
- アプリケーションリストから別のアプリケーションを選択した場合
- 時刻が変更された場合
- 別のアプリケーションを選択した場合(選択状態と時刻が変更)
- 同じアプリケーションを再度選択した場合(選択状態は維持されるが、時刻が変更されスレッドダンプが更新)
- アプリケーション選択状態が変更された場合
- ドロワー内で同じスレッドダンプを再分析しても 1 回分消費されます
- 新しいスレッドダンプを分析する場合、1 回分消費されます
ソケットオプーン数
ホーム画面 > プロジェクト選択 > インスタンス性能管理 > ソケットオプーン数

JavaアプリケーションがTCP機能を実行するためにオープンしたソケット(Socket)情報が確認できます。これにより、 アプリケーションインスタンスがデータベースなど、どの外部システムに依存するか、ネットワーク依存性(Network Dependency)を照会できます。 また、誰とアウトバウンドコールを行っているかを追跡できます。 これらの情報は、TCP通信の効率性、安定性、及び性能最適化のために重要です。
-
数: 外部システムへの接続試行回数を意味します。
-
スタック: スタック取得を選択して、次の接続時に確保したスタックを照会・削除できます。
数基準にソートした後、ホスト及びポートを確認して、どのようなサービスまたはシステムとの接続が多いかを確認できます。 以後、スタックを確保して詳細を照会してみてください。
データベースとコネクションプール
例えば、3306ポートの数