@@ -25,67 +25,68 @@ object JFR {
2525
2626 private val started = AtomicBoolean (false )
2727
28- context( KLogger )
29- suspend fun recordingStream () = runOnVirtualThread {
30- if (! started.getAndSet(true )) {
31- info { " Adding periodic JFR event..." }
32- addPeriodicJFREvent(Counter ()) { inc() }
33- }
28+ suspend fun recordingStream ( logger : KLogger ) = runOnVirtualThread {
29+ with (logger) {
30+ if (! started.getAndSet(true )) {
31+ info { " Adding periodic JFR event..." }
32+ addPeriodicJFREvent(Counter ()) { inc() }
33+ }
3434
35- val config = Configuration .getConfiguration(" profile" )
36- RecordingStream (config).use {
37- info { " RecordingStream started!" }
38- it.setMaxSize(5_000_000 )
39- it.enable(" jdk.CPULoad" ).withPeriod(Duration .ofSeconds(1 ))
40- it.onEvent(" jdk.CPULoad" ) { event ->
41- val jvmUser = event.getFloat(" jvmUser" )
42- val jvmSystem = event.getFloat(" jvmSystem" )
43- val machineTotal = event.getFloat(" machineTotal" )
44- info {
45- " JVM User: %1$.2f, JVM System: %2$.2f, Machine Total: %3$.2f"
46- .format(jvmUser, jvmSystem, machineTotal)
47- }
35+ val config = Configuration .getConfiguration(" profile" )
36+ RecordingStream (config).use {
37+ info { " RecordingStream started!" }
38+ it.setMaxSize(5_000_000 )
39+ it.enable(" jdk.CPULoad" ).withPeriod(Duration .ofSeconds(1 ))
40+ it.onEvent(" jdk.CPULoad" ) { event ->
41+ val jvmUser = event.getFloat(" jvmUser" )
42+ val jvmSystem = event.getFloat(" jvmSystem" )
43+ val machineTotal = event.getFloat(" machineTotal" )
44+ info {
45+ " JVM User: %1$.2f, JVM System: %2$.2f, Machine Total: %3$.2f"
46+ .format(jvmUser, jvmSystem, machineTotal)
47+ }
4848
49- // if (jvmUser > 0.8) {
50- // it.dump(Path("cpu-load.jfr"))
51- // }
52- }
49+ // if (jvmUser > 0.8) {
50+ // it.dump(Path("cpu-load.jfr"))
51+ // }
52+ }
5353
54- // Contended classes for more than 10ms
55- it.enable(" jdk.JavaMonitorEnter" ).withThreshold(Duration .ofMillis(10 ))
56- it.onEvent(" jdk.JavaMonitorEnter" ) { event ->
57- info { " Long held Monitor: ${event.getClass(" monitorClass" )} " }
58- }
54+ // Contended classes for more than 10ms
55+ it.enable(" jdk.JavaMonitorEnter" ).withThreshold(Duration .ofMillis(10 ))
56+ it.onEvent(" jdk.JavaMonitorEnter" ) { event ->
57+ info { " Long held Monitor: ${event.getClass(" monitorClass" )} " }
58+ }
5959
60- it.enable(" jdk.GarbageCollection" )
61- it.enable(" jdk.JVMInformation" )
62- it.onEvent(" jdk.JVMInformation" ) { event ->
63- val jvmName = event.getString(" jvmName" )
64- val jvmVersion = event.getString(" jvmVersion" )
65- info { " JVM: $jvmName , Version: $jvmVersion " }
66- }
60+ it.enable(" jdk.GarbageCollection" )
61+ it.enable(" jdk.JVMInformation" )
62+ it.onEvent(" jdk.JVMInformation" ) { event ->
63+ val jvmName = event.getString(" jvmName" )
64+ val jvmVersion = event.getString(" jvmVersion" )
65+ info { " JVM: $jvmName , Version: $jvmVersion " }
66+ }
6767
68- it.enable(" dev.suresh.Counter" )
69- it.onEvent(" dev.suresh.Counter" ) { event ->
70- val duration = event.duration.toMillis()
71- info { " Count: ${event.getLong(" count" )} , duration: $duration " }
68+ it.enable(" dev.suresh.Counter" )
69+ it.onEvent(" dev.suresh.Counter" ) { event ->
70+ val duration = event.duration.toMillis()
71+ info { " Count: ${event.getLong(" count" )} , duration: $duration " }
7272
73- // Find correlation events by getting an event window 1 sec before and after the event.
74- if (duration > 500 ) {
75- EventStream .openRepository().use { es ->
76- es.setStartTime(event.startTime.minus(Duration .ofSeconds(1 )))
77- es.setEndTime(event.endTime.plus(Duration .ofSeconds(1 )))
78- es.onEvent(" jdk.GCPhasePause" ) { gcEvent ->
79- val gcDuration = gcEvent.duration.toMillis()
80- info { " GC pause of $gcDuration millis during the Counter event!" }
73+ // Find correlation events by getting an event window 1 sec before and after the event.
74+ if (duration > 500 ) {
75+ EventStream .openRepository().use { es ->
76+ es.setStartTime(event.startTime.minus(Duration .ofSeconds(1 )))
77+ es.setEndTime(event.endTime.plus(Duration .ofSeconds(1 )))
78+ es.onEvent(" jdk.GCPhasePause" ) { gcEvent ->
79+ val gcDuration = gcEvent.duration.toMillis()
80+ info { " GC pause of $gcDuration millis during the Counter event!" }
81+ }
8182 }
8283 }
8384 }
84- }
8585
86- it.startAsync()
87- Thread .sleep(3 .seconds.toJavaDuration())
86+ it.startAsync()
87+ Thread .sleep(3 .seconds.toJavaDuration())
88+ }
89+ info { " RecordingStream done!" }
8890 }
89- info { " RecordingStream done!" }
9091 }
9192}
0 commit comments