Add jfr-demo: JFR + Mission Control profiling of a live Spring Boot app
Custom OrderProcessed event, CPU/allocation/lock workloads, a diagnostic endpoint over the JVM's live FlightRecorder state, a JUnit test using the jdk.jfr.Recording API, and nine captured recordings (flagship, mid-flight snapshot, isolated vs concurrent threshold comparisons, and a real dump+stop duplication bug) with their docs/output/*.txt transcripts.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
Top stack frames from jdk.ExecutionSample, live-demo.jfr, during six concurrent
|
||||
GET /api/cpu/fibonacci?n=38 calls, aggregated by the top (leaf) frame only.
|
||||
|
||||
$ jfr print --events jdk.ExecutionSample --stack-depth 1 recordings/live-demo.jfr \
|
||||
| grep -A1 stackTrace | grep -v 'stackTrace\|^--' | sed 's/^\s*//' | sort | uniq -c | sort -rn
|
||||
|
||||
62 com.ankurm.jfr.service.WorkloadService.fibonacci(int) line: 40
|
||||
13 com.ankurm.jfr.service.WorkloadService.churnAllocations(int) line: 56
|
||||
9 com.ankurm.jfr.service.WorkloadService.churnAllocations(int) line: 52
|
||||
2 jdk.internal.util.DecimalDigits.uncheckedGetCharsLatin1(int, int, byte[]) line: 168
|
||||
1 org.apache.tomcat.util.net.NioEndpoint$Poller.run() line: 941
|
||||
1 org.apache.tomcat.util.http.MimeHeaders.addValue(byte[], int, int) line: 327
|
||||
1 org.apache.catalina.mapper.Mapper.compareIgnoreCase(CharChunk, int, int, String) line: 1401
|
||||
1 org.apache.catalina.core.ApplicationFilterFactory.createFilterChain(ServletRequest, Wrapper, Servlet) line: 75
|
||||
1 jdk.internal.util.DecimalDigits.stringSize(int) line: 101
|
||||
1 jdk.internal.misc.Unsafe.allocateUninitializedArray(Class, int) line: 1396
|
||||
1 java.util.concurrent.locks.LockSupport.unpark(Thread) line: 181
|
||||
1 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.signalAll() line: 1590
|
||||
1 java.util.Arrays.copyOf(Object[], int) line: 3478
|
||||
1 java.nio.Buffer.position(int) line: 325
|
||||
1 java.lang.invoke.DirectMethodHandle.allocateInstance(Object) line: 500
|
||||
|
||||
total jdk.ExecutionSample events in recording: 98
|
||||
fibonacci() share of samples: 62 / 98 = 63.3%
|
||||
|
||||
$ jfr print --events jdk.ExecutionSample recordings/live-demo.jfr | head -13
|
||||
jdk.ExecutionSample {
|
||||
startTime = 09:59:03.699 (2026-10-01)
|
||||
sampledThread = "http-nio-8080-exec-1" (javaThreadId = 30)
|
||||
state = "STATE_RUNNABLE"
|
||||
stackTrace = [
|
||||
com.ankurm.jfr.service.WorkloadService.fibonacci(int) line: 40
|
||||
com.ankurm.jfr.service.WorkloadService.fibonacci(int) line: 40
|
||||
com.ankurm.jfr.service.WorkloadService.fibonacci(int) line: 40
|
||||
com.ankurm.jfr.service.WorkloadService.fibonacci(int) line: 40
|
||||
com.ankurm.jfr.service.WorkloadService.fibonacci(int) line: 40
|
||||
...
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user