ヒープダンプを簡単に取得するメモ #Windows #Java

経緯

過去に、タスクマネージャやJconsoleで負荷を見つつ、

ヒープダンプを随時取得しメモリーリークの証拠を得たいことがあり、調べた内容のメモになります。

JVMベースの言語は多いので、参考になれば・・・?と思います

ヒープダンプの取得方法

主に、VMオプションを指定し、OutOfMemoryエラーが発生した際に取得する方法と、

jmapコマンドを使って取得する方法の二つがあります。

今回は随時、取得したいので、VMオプションとjmapコマンドを組み合わせました。

  1. OutOfMemoryError発生時に取得するオプション
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump-oome.hprof
  2. jmapコマンドで取得する
    %JAVA_HOME%/bin/jmap -dump:format=b,file=heapdump_manual.hprof %PID%

毎回、コマンドプロンプト開いて実行するのは、面倒ですよね。。。

バッチファイル化

そこで、バッチファイルを実行して、PIDと名称を入力すれば、

カレントフォルダに名称+PID付きのダンプファイルを取得するバッチファイルを作りました。

デスクトップや、作業フォルダに置いておくと、実行したい時にすぐ実行できるので便利です。

バッチファイルの内容はこんな感じです。

簡単で申し訳ない。。。。

バッチファイルの解説

まず、SET /P でファイル名とPIDの標準入力できる様にします。

PIDはjconsoleや、タスクマネージャでわかり、名前は適当に分かりやすい名前にしてください。

次に、NOW変数にファイル名の為の現在日時を格納します。
ファイル名にしたいので、記号や空白文字を空文字に置き換えて、数字だけにします。

最後に、jmapコマンドで、ヒープダンプを取得します。
format=bのオプションは、Eclipse Memory Analyzerで分析する為に付与しています。

ちなみにjmapコマンドのオプションに、-Fを付与すると、強制でヒープダンプを取得します。

以上

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です