daybreaksnow's diary

私を私と呼びたい

Javaメモリ使用量調査(Windows)

前回Linuxでやったのと同じようなことをWindowsでもやったのでメモ。
Linux版→Javaメモリリーク調査ログ(Linux) - daybreaksnow's diary

非効率な検索処理があり、将来的にデータが増えたときにOOMEが発生しないか調べる必要があった。
そのため、Eclipse上でブレークポイントを張って任意の時点のメモリ使用量を調べすることとした。

  1. 調査対象プログラムをEclipseからデバッグ実行
  2. コマンドプロンプトからjpsコマンドで対象のプロセスIDを取得(tasklistだとjavaw.exeでどのプロセスだか特定できない)
  3. 対象の処理前後でブレークを張ってダンプを取得
jmap -dump:format=b,file=XXX.hprof プロセスID

・ダンプを取るのに使ったバッチファイル

@echo off
setlocal

if "%1"=="" (
	goto usage
)

if "%2"=="" (
	goto usage
)
set DUMPFILE=%1
set PID=%2

"C:\Program Files\Java\jdk1.7.0_25\bin\jmap" -dump:format=b,file=%DUMPFILE%.hprof %PID%
goto end

:usage
echo usage: localdump.bat ^<dumpFileName^> ^<pid^>

:end

endlocal