JFRでdirect memory statisticsを見る
JDK 15からdirect memory statisticsのJFR eventが追加されたので試したときのメモ。
準備
ソースコード
Nettyで確認したいので、Spring WebFluxを使う。Spring InitializrからWebFluxのプロジェクトを作成して、RestControllerを追加しただけ。
build.gradle
plugins { id 'org.springframework.boot' version '2.5.6' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-webflux' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'io.projectreactor:reactor-test' } test { useJUnitPlatform() }
DemoApplication.java
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
HelloController.java
@RestController public class HelloController { @GetMapping public Mono<String> hello() { return Mono.just("Hello!"); } }
Demo
Flight Recorderを有効にしてアプリを実行する。
% sdk use java 17.0.1-open % java -XX:StartFlightRecording:filename=recording1.jfr -jar build/libs/demo-0.0.1-SNAPSHOT.jar
記録したJFRファイルをJDK Mission Controlで開くと、Direct Buffer Statisticsが確認できた。
参考
- [JDK-8238665] Add JFR event for direct memory statistics - Java Bug System
- https://github.com/openjdk/jdk/blob/jdk-17+35/src/jdk.jfr/share/classes/jdk/jfr/events/AbstractBufferStatisticsEvent.java
- https://github.com/openjdk/jdk/blob/jdk-17%2B35/src/jdk.jfr/share/classes/jdk/jfr/events/DirectBufferStatisticsEvent.java