目次

すでに存在しているページ

すでにまとめられているページがあるので、とりあえずそちらをご覧ください。 このページはそれらのページのつまみ食いという感じです。

Javaメモリ、GCチューニングとそれにまつわるトラブル対応手順まとめ

http://d.hatena.ne.jp/learn/20090218/p1

JavaアプリのメモリリークやOutOfMemoryError?の調査方法について

http://www.syboos.jp/java/doc/how-to-do-when-OutOfMemoryError.html

hprof

JVMTI を利用したプロファイラエージェントで、ヒープや実行時間のプロファイリングなど基本的な機能が提供されている。

hprof を利用するには

これでも利用できますが、よりビジュアルに結果を見るために、eclipseでMemory Analayzer のプラグインが提供されています。

ヘルプの出し方

下記のコマンドでヘルプを見ることができる

java -agentlib:hprof=help

何の略か

HPROF: Heap and CPU Profiling Agent (JVMTI Demonstration Code)

使い方

hprof usage: java -agentlib:hprof=[help]|[<option>=<value>, ...]

オプション

Option Name and Value  Description                    Default
---------------------  -----------                    -------
heap=dump|sites|all    heap profiling                 all
cpu=samples|times|old  CPU usage                      off
monitor=y|n            monitor contention             n
format=a|b             text(txt) or binary output     a
file=<file>            write data to file             java.hprof[{.txt}]
net=<host>:<port>      send data over a socket        off
depth=<size>           stack trace depth              4
interval=<ms>          sample interval in ms          10
cutoff=<value>         output cutoff point            0.0001
lineno=y|n             line number in traces?         y
thread=y|n             thread in traces?              n
doe=y|n                dump on exit?                  y
msa=y|n                Solaris micro state accounting n
force=y|n              force output to <file>         y
verbose=y|n            print messages about dumps     y

Obsolete Options

gc_okay=y|n

 - Get sample cpu information every 20 millisec, with a stack depth of 3:
     java -agentlib:hprof=cpu=samples,interval=20,depth=3 classname
 - Get heap usage information based on the allocation sites:
     java -agentlib:hprof=heap=sites classname

メモ

注意

デフォルト出力

デフォルトではプロファイル結果はjava.hprof.txtというファイルに出力されます

日本語で紹介しているサイト

Java/hprof(jvmpi)

http://apis.jpn.ph/fswiki/wiki.cgi?page=Java%2Fhprof%28jvmpi%29

Javaでヒープダンプの取得/解析メモ その1

http://lenemarix2.blog28.fc2.com/blog-entry-16.html

JavaアプリのPIDを調査

jps -l

スレッドダンプ

jstack PID

ガーベッジ・コレクションのスナップショット

jstat -gc 5756 250 10

jmap

プロセス番号を調べてからつかいます。

自分はcygwinとかいれているので、

tasklist | nkf | grep java

とかで調べています。

バイナリファイルで結果を出力する例

jmap -dump:format=b,file=出力ファイルパス プロセス番号

出てきたファイルを見るには

jhat -J-Xmx700m jmapでの出力ファイルパス

Eclipse Memory Analyzer

以下紹介サイトより抜粋

詳しくは下記の紹介サイトをごらんください。

公式サイト

http://eclipse.org/mat/downloads.php

インストール紹介サイト

http://xiangcai.at.webry.info/201009/article_7.html

※現時点では、MATの更新サイトのアドレスがバージョンアップで変更になっていました。 http://download.eclipse.org/mat/1.2/update-site/

紹介サイト

http://tlync.hateblo.jp/entry/20111220/1324372308

使い方メモ

1.Eclipseのプラグインなので適当にインストール。

2.Eclipseの実行の構成を開いて、引数タブのVM引数に以下のどちらかを設定する。

hprofファイルだけを出力します。

-Xrunhprof:heap=dump,format=b,file=./${project_name}.hprof

hprofファイルも出力されるけど関係ないファイルが全部出力される。

-agentlib:hprof=heap=dump,format=b

3.普通に実行

4.hprofファイルが出力されるので開くと、メモリの使用状態が表示される。

Eclipseでtomcatの場合

http://wiki.eclipse.org/index.php/MemoryAnalyzer#Getting_a_Heap_Dump http://tomcat.10.x6.nabble.com/How-to-generate-heap-dump-in-Tomcat-5-5-Windows-td4643861.html

情報源

http://odasusu.hatenablog.com/entry/20080730/1217419266

PrintClassHistogram?オプション

そのプロセスに対して一定間隔ごとにSIGQUITシグナルを送信する。

利用方法

Java起動時に以下のオプションを追加する

java -verbose:gc -XX:+PrintClassHistogram TestMain

UNIX系で情報を取得

crontabで実行するコマンド

kill -3 <java pid>

情報源

http://www.atmarkit.co.jp/fjava/rensai4/troublehacks08/troublehacks08_2.html

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS