Javaメモリリーク調査ログ(Linux)
CentOS6.4で動いているプロセスを対象に、以下の2点を調査した。
- 起動直後、取込後、再取込後のヒープ使用量を取得し、どのオブジェクトが増えている(残り続けている)のか調べる
- GCのログを取り、メモリリークがないか調べる
ヒープダンプ調査手順
Java実行オプション
調査対象のVM引数に以下を追加
-XX:+PrintGCTimeStamps -Xloggc:gc.log -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError
tomcat
以下のファイルを作成
・ /usr/local/tomcat7/bin/setenv.sh
CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCDetails -Xloggc:/home/tomcat_gc.log"
※-XX:+PrintGCTimeStampsは認識されなかったが、自動で付加されていた
ダンプを取るのに利用したシェル
#!/bin/sh # 引数チェック if [ $# -lt 2 ]; then echo 引数に出力先ファイル名、PIDを指定してください。 exit 1 fi OUT_FILE=$1 PID=$2 OPT=$3 DATE=`date +%y%m%d`_`date +%H%M` /home/hoge/tool/jdk1.7.0_21/bin/jmap ${OPT} -dump:format=b,file=${OUT_FILE}_${DATE}.hprof ${PID}