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