JITWatchを試す
OpenJDKでJITWatchを試したときのメモ。
準備
JDK
AdoptOpenJDK 11 HosSpotを用意する。今回はSDKMANでインストールする。
% sdk install java 11.0.9.hs-adpt % sdk use java 11.0.9.hs-adpt
hsdis (HotSpot disassembler)
AdoptOpenJDKのソースコードをダウンロードして、hsdisのディレクトリに移動する。
% git clone git@github.com:AdoptOpenJDK/openjdk-jdk11u.git % git checkout jdk-11.0.9+11_adopt % cd openjdk-jdk11u/src/utils/hsdis
binutilsをダウンロードする。
(AdoptOpenJDK 11.0.9の場合、binutils-2.29 以降を使うとビルドできなかったので、このバージョンを使う)
% wget http://ftp.gnu.org/gnu/binutils/binutils-2.28.1.tar.gz % tar xvf binutils-2.28.1.tar.gz
hsdisをビルドする。
% make BINUTILS=binutils-2.28.1 ARCH=amd64
ビルドしたhsdisのライブラリを、SDKMANでインストールしたJDKのディレクトリにコピーする。
% cp build/macosx-amd64/hsdis-amd64.dylib ~/.sdkman/candidates/java/11.0.9.hs-adpt/lib/server/
JITWatch
JITWatchをダウンロードしてビルドする。
% git clone git@github.com:AdoptOpenJDK/jitwatch.git % cd jitwatch % ./gradlew clean build
HotSpotログファイル
今回はJITWatchのデモアプリを使う 。
ダウンロードしたJITWatchの中にある以下のシェルを実行すると、カレントディレクトリにhotspot_pidxxxxx.log
というログファイルが出力される。
% ./makeDemoLogFile.sh
Demo
JITWatchの設定
JITWatchを起動する。
% ./gradlew run
Config
ボタンをクリックしてJITWatch Configurationを開く。
Source locations
Add JDK src
ボタンをクリックしてJDKのsrc.zipを追加する。
$HOME/.sdkman/candidates/java/11.0.9.hs-adpt/lib/src.zip
Add Folder
ボタンをクリックして解析するsourceを追加する。
※デモアプリの場合 [working directory]/jitwatch/core/src/main/java
Class locations
Add Folder
ボタンをクリックして解析するclassを追加する 。
※デモアプリの場合 [working directory]/jitwatch/core/build/classes/java/main
Source locationsとClass locationsを設定後、Save
ボタンをクリックする。
JITWatchで解析
Open Log
ボタンからHotSpotログファイルを選択して、Start
ボタンをクリックする 。
解析が終わると、Compilations TimelineやTriViewなどが見れる。
詳細はこちら
https://www.chrisnewland.com/images/jitwatch/HotSpot_Profiling_Using_JITWatch.pdf
参考
https://github.com/AdoptOpenJDK/jitwatch
https://www.morling.dev/blog/building-hsdis-for-openjdk-15/
https://www.sakatakoichi.com/entry/2014/12/04/202747
https://www.sakatakoichi.com/entry/2016/06/01/180742
https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-MA15-Architect-newland.pdf