- PR -

jhatの利用

1
投稿者投稿内容
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2008-09-03 11:27
Tomcatを運用していますが、メモリリークとおもわれる状況があり、レスポンスの低下、
OutOfMemoryによるシステム停止が発生しています。
そこでjhatでクラス別のインスタンス数等を調べようとしています。

CATALINA.batに以下の行を追加し、
set JAVA_OPTS=%JAVA_OPTS% -agentlib:hprof=format=b

Tomcatを起動し、現象発生するオペレーションを実行すると、起動フォルダに
ファイルjava.hprof
ができるので、見ようとすると

C:\tomcat\bin>jhat java.hprof
Reading from java.hprof...
Dump file created Wed Sep 03 09:50:19 JST 2008
java.io.IOException: Unrecognized heap dump sub-record type: 108
at com.sun.tools.hat.internal.parser.HprofReader.readHeapDump(HprofReade
r.java:485)
at com.sun.tools.hat.internal.parser.HprofReader.read(HprofReader.java:2
22)
at com.sun.tools.hat.internal.parser.Reader.readFile(Reader.java:79)
at com.sun.tools.hat.Main.main(Main.java:143)

とエラーになってしまいます。
どこか変更すればうまくいくでしょうか?


jhatの使用テストでjavaアプリケーションの実行、jhatでの参照は以下のようにうまく
いっています。

C:\java\test>java -agentlib:hprof=format=b ref
C:\java\test>jhat java.hprof
Reading from java.hprof...
Dump file created Wed Sep 03 11:15:05 JST 2008
Snapshot read, resolving...
Resolving 5198 objects...
Chasing references, expect 1 dots.
Eliminating duplicate references.
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

上のうまくいってるときのjava.hprofのサイズは440Kほどですが、本当に処理したい
Tomcat実行時のjava.hprofは150Mほどあります。


環境
WindowsXP Pro SP1
tomcat-5.5.16
C:\java\test>java -version
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sh

C:\java\test>jhat -version
jhat version 2.0 (java version 1.6.0_07)

1

スキルアップ/キャリアアップ(JOB@IT)