ページの先頭行へ戻る
Interstage Application Server V13.0.0 トラブルシューティング集
FUJITSU Software

A.2 jheap

jheapは、実行中のJavaプログラムのヒープ使用状況を出力するツールです。

動作環境

サポート対象のJDK

製品添付のOpenJDK

サポート対象のガーベジコレクション(GC)

次のGC処理が動作対象のGC処理です。

  • シリアルGC

  • パラレルGC

  • CMS付きパラレルGC

上記以外のGC処理に対しては、jheapは動作しません。
サポートするGC処理の詳細は、“チューニングガイド”の“OpenJDK 8のチューニング”の“サポートされるガーベジコレクション処理”を参照してください。

格納先

jheapは、コマンドプロンプトから起動するコマンドで、モジュール名はjheapです。
格納先は次のとおりです。

以下、製品を“C:\Interstage”にインストールした場合を想定しています。

形式

jheap [-i interval] [-c count] [-t] pid

機能説明

pidで指定した動作中のJavaプログラムのヒープ使用状況を一定時間の間隔で標準出力に出力します。
pidには、プロセスIDを指定します。
Windows(R)の場合は、プロセスIDは“タスクマネージャ”で確認することができます。

GlassFishの場合、GlassFish ServerクラスターのプロセスIDの確認方法は、”GlassFish 設計・構築・運用ガイド”を参照してください。

オプション

-i interval

測定の間隔を秒単位で指定します。省略可能です。
省略した場合は、5秒間隔で測定します。

-c count

出力する回数を指定します。省略可能です。
省略した場合は、指定したプロセスが終了するまで出力し続けます。

-t

タイムスタンプを出力する場合に指定します。省略可能です。

pid

プロセスIDを指定します。

プロセスID以外の、-i, -c ,-t オプションの指定の順序は任意です。
また、-i , -c オプションを複数回指定した場合は、最後に指定したオプションが有効となります。

“-i”および“-c”オプションには、正の整数(1~2147483647)を指定することができます。
そのとき、オプションに指定された文字列を先頭から解析し、数字以外の文字が指定された時点で解析を終了します。たとえば、“12.345”は“12”と解釈します。

使用方法

コマンドプロンプトからjheap.exeをフルパスで指定して実行してください。

解説

Javaアプリケーションのメモリ使用状況には以下があります。

プロセス全体のメモリ使用状況は、OSの機能(Windows(R)ではタスクマネージャやパフォーマンスモニタ、Solarisではpmap/prstatなど)で把握することができます。
一方、Javaヒープの使用状況は、以下で確認することができますが、プログラム起動時に指定するか、あらかじめソースコードに仕込む必要があります。

jheapは、JavaプログラムのJavaヒープの使用状況を、プログラムの起動後に調査することができます。

メタスペースはJavaヒープではありませんが、jheapコマンドで表示することができます。jheapでは、以下のように、それぞれの領域の使用状況を検出することができます。

----------------------------------------------------------------------
<new>  [used:    847728] [free:   1511568] [total:   2359296]
<old>  [used:  33699152] [free:   2820784] [total:  36519936]
<meta> [used:   6460336] [free:     93264] [total:   6553600]

used  :現在の使用量  (byte)
free  :現在の空き容量(byte)
total :現在の領域長  (byte)
----------------------------------------------------------------------

これら3つの領域は、newなどによるメモリ確保、ガーベジコレクションなどにより、増減します。totalは、現在メモリがマッピングされている量であり、最大値ではないことに注意が必要です。
new + oldで、-verbose:gcで表示される情報に相当します。
New世代領域、Old世代領域ともに、Javaクラスのインスタンスが格納される領域です。
New世代領域には、newされてからの時間が比較的短いインスタンスが格納されます。
Old世代領域には、newされてからの時間が比較的長いインスタンスがガーベジコレクションにより、New世代領域から移動されます。メタスペースは、標準のJavaの機能で測定することはできませんが、Javaのクラスや定数などの不変な情報が格納される領域です。Javaプログラムで使用するクラスの種類が多かったり、クラスのサイズが大きかったりする場合に不足する場合があります。
記録された値を元に、ヒープ域の使用状況と実際の処理の経過時間とを比較し、繁忙時のヒープの使用状況を確認できます。もし結果がヒープ域の最大値に近接した値であれば、ヒープ域の最大値を拡張し、余裕を持たせる必要があります。

注意

Jakarta ServletやEJBなどのサーバアプリケーションの測定をするためには、Administrator権限でjheapを実行する必要があります。

また、Administratorグループのメンバーにより、管理者権限で実行したコマンドプロンプトからjheapを実行する必要があります。
管理者権限でコマンドプロンプトを実行するには、コマンドプロンプトの実行ファイルをエクスプローラー上で右クリックし、“管理者権限で実行する”を選択します。

測定対象のプロセスに対して、プロセスの読込み権が必要です。
Jakarta ServletやEJBなどのサーバアプリケーションの測定をするためには、通常rootでjheapを実行する必要があります。