Interstage Application Server トラブルシューティング集
目次 索引 前ページ次ページ

付録B Javaツール機能

B.2 jheap

■jheapとは

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

■格納先

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

※製品を“C:\Interstage”にインストールした場合

 jheapが格納されたディレクトリを環境変数PATHに設定します。
 もしくはPATHの設定されているディレクトリにjheapを格納します。

■形式

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

■機能説明

 pidで指定した動作中のJavaプログラムのヒープ使用状況を一定時間の間隔で標準出力に出力します。
 pidには、プロセスIDを指定します。プロセスIDはWindowsの“タスクマネージャ”で参照可能です。また、Interstage管理コンソールのIJServerモニタ画面で、各ワークユニットのプロセスIDを参照可能です。

■オプション

-i interval

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

-c count

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

-t

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

pid

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

プロセスID以外の、-i, -c ,-t オプションの指定の順序は任意です。
また、-i , -c オプションを複数回指定した場合は、最後に指定したオプションが有効となります。
“-i”および“-c”オプションには、正の整数(1〜2147483647)を指定することができます。
そのとき、オプションに指定された文字列を先頭から解析し、数字以外の文字が指定された時点で解析を終了します。たとえば、“12.345”は“12”と解釈します。

■使用方法

----------------------------------------------------------------------
% jheap  123
<new>  [used:    847728] [free:   1511568] [total:   2359296]
<old>  [used:  33699152] [free:   2820784] [total:  36519936]
<perm> [used:   6460336] [free:     93264] [total:   6553600]
<new>  [used:    847728] [free:   1511568] [total:   2359296]
<old>  [used:  33699152] [free:   2820784] [total:  36519936]
<perm> [used:   6460336] [free:     93264] [total:   6553600]
<new>  [used:    847728] [free:   1511568] [total:   2359296]
<old>  [used:  33699152] [free:   2820784] [total:  36519936]
<perm> [used:   6460336] [free:     93264] [total:   6553600]
・・・
----------------------------------------------------------------------

■解説

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

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

 jheapは、JavaプログラムのJavaヒープの使用状況を、プログラムの起動後に調査することができます。
 Javaヒープは、通常のオプションでは、New世代領域、Old世代領域、Permanent世代領域の3つに大別されます。jheapでは、以下のように、それぞれの領域の使用状況を検出することができます。

----------------------------------------------------------------------
<new>  [used:    847728] [free:   1511568] [total:   2359296]
<old>  [used:  33699152] [free:   2820784] [total:  36519936]
<perm> [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世代領域から移動されます。
 Permanent世代領域は、標準のJavaの機能で測定することはできませんが、Javaのクラスや定数などの不変な情報が格納される領域です。Javaプログラムで使用するクラスの種類が多かったり、クラスのサイズが大きかったりする場合に不足する場合があります。
 記録された値を元に、ヒープ域の使用状況と実際の処理の経過時間とを比較し、繁忙時のヒープの使用状況を確認できます。もし結果がヒープ域の最大値に近接した値であれば、ヒープ域の最大値を拡張し、余裕を持たせる必要があります。

■注意事項

ServletやEJBなどのサーバアプリケーションの測定をするためには、Administrator権限でjheapを実行する必要があります。
Windows 2000、Windows XP、Windows Server 2003のみ動作します。
注) Windows 98、Windows Meでは動作しません。
測定対象のプロセスに対して、プロセスの読込み権が必要です。
ServletやEJBなどのサーバアプリケーションの測定をするためには、通常rootでjheapを実行する必要があります。
製品添付のJDK/JRE 1.4.2_05のみ動作します。

■動作環境

サポート対象のJava VM

 製品添付のJDK/JRE 1.3.1_12、1.4.2_05のHotSpot Client VM/FJVM

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

 -XX:+UseTrainGC、-XX:+UseParallelGC、-XX:+UseConcMarkSweepGCなどのオプションを使用して、ガベージコレクションのアルゴリズムを変更した場合は動作しません。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005