LoginSignup
1
1

More than 5 years have passed since last update.

JavaFlightRecorderでheapの使用状況を確認する

Last updated at Posted at 2019-01-17

やりたかったことは、jcmdを利用してjfrファイルをWebアプリケーションサーバで取得し、開発用の自分のPC(Windows)のjmcでheapの使用状況を確認する、ことでした。

基本情報

  • 執筆:2019/1/17
  • OS:RHEL7.4
  • Java1.8

結論(解決に時間がかかったところ)

jfrファイルにheapの利用状況データを記録するためにはプロファイルを修正し、jcmdのsettingsパラメータとして渡す必要がある。(探し方が悪かったのか、辿り着くのにかなり時間がかかった。)

手順

1.プロファイルの修正

以下に2種類のプロファイルが格納されています。

$ cd [JDK_PATH]/jre/lib/jfr
$ ll
-rw-r--r-- 1 root root 20109 10月  6 22:55 default.jfc
-rw-r--r-- 1 root root 20065 10月  6 22:55 profile.jfc

profile.jfcをコピーし(myProfile.jfc)、heapのデータ記録に関すると思われる部分を有効化します。この辺りのリファレンスが見つけられなかったため、これは正しいかは定かではありません。(が、一応動きます。)

<!-- 127行目あたり、falseからtrueへ -->
<flag name="heap-statistics-enabled" label="Heap Statistics">true</flag>

<!-- 268行目あたり、falseからtrueへ -->
    <event path="vm/gc/detailed/object_count">
      <setting name="enabled" control="heap-statistics-enabled">true</setting>
      <setting name="period">everyChunk</setting>
    </event>

2.jfrファイルの取得

詳細情報は割愛しますが、ポイントはsettingsパラメータで先に作成したプロファイルを指定するところです。

jcmd [PID] JFR.start name=MyJfrRec settings=myProfile maxsize=100mb dumponexit=true filename=/tmp/myJfrRec.jfr

記録状況のチェック

jcmd [PID] JFR.check

記録情報のダンプ

jcmd [PID] JFR.dump name=MyJfrRec filename=/tmp/mytasrec.jfr

記録の終了

jcmd [PID] JFR.stop name=MyJfrRec

あとは、取得されるjfrファイルをjmcに読み込ませれば良い感じでグラフが出てくれると思います。

【参考にさせて頂いたサイト】
http://waysaku.hatenablog.com/entry/2014/07/22/005304
https://blogs.oracle.com/poonam/clarifying-some-confusion-around-java-flight-recordings

弊社ではエンジニアを募集中です。こちらも見て頂けると嬉しいです。
https://www.nittsu-infosys.com/recruit/2019/index.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1