http://itpro.nikkeibp.co.jp/article/COLUMN/20061102/252525/ http://apis.jpn.ph/fswiki/wiki.cgi?page=Java%2Fhprof%28jvmpi%29 !!hprof !とりあえず使ってみる java -agentlib:hprof -jar Java2Demo.jar デフォルトではプロファイル結果はjava.hprof.txt になる。 !結果を見やすく java -agentlib:hprof=format=bJava2Demo.jar format=b で結果をバイナリ化する。結果ファイルはjava.hprofになる。 jhat java.hprof で結果を解析してwebブラウザで見れるようになる。 http://localhost:7000 で見れる。 ただし、今のところヒープしか対応していないみたい。 cpuに関する情報は、テキストで見るしかないようだ。 !!結果ファイルの見方 !ヒーププロファイリング SITES BEGIN から SITES END の部分が、使用メモリの統計情報で、メモリの使用量順に出力される。各カラム内容は以下の通り。 ,タイトル ,意味 ,rank ,消費メモリの順位 ,percent self ,消費メモリのパーセンテージ ,percent accum ,消費メモリの累積パーセンテージ(上位rankのpercent selfとの和) ,live bytes ,ライブオブジェクト(GCされていないオブジェクト)の消費バイト数 ,live objs ,ライブオブジェクトのオブジェクト数 ,alloc'ed bytes ,アロケートされたオブジェクト(GCされたオブジェクトを含む)の消費バイト数 ,alloc'ed objs ,アロケートされたオブジェクトのオブジェクト数 ,stack trace ,対応するトレース番号 ,class name ,クラス名 クラス名の部分に記述されている [C や [I といったクラス名は配列を表す。 ,クラス名 ,意味 ,[Lクラス名 ,オブジェクトの配列 ,[Z ,boolean型の配列 ,[B ,byte型の配列 ,[C ,char型の配列 ,[S ,short型の配列 ,[I ,int型の配列 ,[J ,long型の配列 ,[F ,float型の配列 ,[D ,double型の配列 !CPU使用率プロファイリング CPU TIME (ms) BEGIN から CPU TIME (ms) END の部分が、CPU使用率の情報で、使用率順に出力される。各カラム内容は以下の通り。 ,タイトル ,意味 ,rank ,CPU時間の順位 ,self ,CPU時間のパーセンテージ ,accum ,CPU使用時間の累積パーセンテージ(上位rankのselfとの和) ,count ,ヒットしたサンプリング数(samples指定)/メソッドのコール回数(times指定) ,trace ,対応するトレース番号 ,method ,メソッド名 !!オプション ,オプション名前と値 ,オプションの説明 ,デフォルト ,heap=dump|sites|all ,ヒープのプロファイリング ,all ,cpu=samples|times|old ,CPU 使用率のプロファイル ,off ,monitor=y|n ,モニターの競合 ,n ,format=a|b ,ASCII またはバイナリ形式 ,a ,file=name ,データをファイルに書き出す ,java.hprof[.txt] ,net=host:port ,データをソケット経由で送信 ,ファイルに書き出す ,depth=size ,スタックトレースの深さ ,4 ,cutoff=value ,出力のカットオフポイント ,0.0001 ,lineno=y|n ,トレースに行番号を出力するか ,y ,thread=y|n ,トレースにスレッドを出力するか ,n ,doe=y|n ,終了時にダンプするか ,y ,gc_okay=y|n ,GC okay during sampling ,y !ヒーププロファイリングのオプション値 ,引数 ,動作 ,sites ,使用メモリの統計情報を出力 ,dump ,ヒープのダンプを出力 ,all ,sitesとdumpの両方を出力 !CPU使用率プロファイルのオプション値 ,引数 ,動作 ,samples ,定期的にサンプリングし、アクティブなスレッド(メソッド)をカウントする ,times ,メソッドのIN/OUTを監視し、メソッドのコール回数をカウントする ,old ,timesと同様。出力形式が、旧hprofフォーマットとなる {{category2 プログラミング言語,Java}}