男子たるものJVMと仲良くせねばなりません。
仲良くなるにはまず相手のことを良く知ることから始めましょう。
Coreダンプを読むには
至極一般的なCoreといえばこれ。基本ツールに食わせてうはうは言いながら見るといい。
IBMのダンプアナライザはここからDLできる。
http://www.alphaworks.ibm.com/tech/jca/download
侍もみやすい。
http://yusuke.homeip.net/samurai/ja/index.html
HeapDumpを読むには
Coreだけじゃ満足できない時はHeapも見る。てかJavaHeap内のメモリ使用状況の解析をしたいならHeapDumpをみなくちゃ始まりません。
普通にHeapDumpを解析するならGUIでみるのが一番。
IBMからでてるHeapAnalyzerを使うのがベター。
メモリが少ないと動かなくなるのでXmxを指定して起動するのがデフォ
java -jar -Xmx768M ha36.jar
phdを食わせてあげると色々見れます。便利です。
メモリリークなら以下のような手順で調査します。
オブジェクトサイズの計測とメモリリークの検出 (1/2):CodeZine(コードジン)
HeapDumpをテキストで読みたい
出力の仕方にもよりますがバイナリで出力されてたりします。
ツールに食わせるにはバイナリじゃないと駄目ですが、人としてテキストで見たくなったりもします。
そんな時はsvcdump.jarとHR207.jarを入手して
java -Xbootclasspath/p:svcdump.jar -Xmx768M -jar HR207.jar -i HEAPDUMP.phd
と打つとバイナリダンプを読み込んでくれます。んで
save-txt
と打つことでファイルに吐いてくれる。
ちなみに50MぐらいのバイナリヒープをTxtにすると300Mぐらいに膨れるので注意。まあ当然ですが。
尚、ダンプがうまくとれていないと
Fatal exception : java.lang.Error: Unexpected error: java.io.EOFException at HR.input.NPHDParserImpl.(NPHDParserImpl.java:96)
といった感じで読み込めないことがある模様。なんでファイルが壊れてしまっているかはわからないっす><
参考
HeapRoots http://www.alphaworks.ibm.com/tech/heaproots
FindRoots http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty2.html
HeapAnalyzer http://www.alphaworks.ibm.com/tech/heapanalyzer
svcdump.jar http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg21190476
HR207.jar http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg2400575