├── .gitignore
├── socket-read.png
├── GC_PARALLEL.md
├── GC_SHENANDOAH.md
├── src
└── main
│ └── java
│ └── pbouda
│ └── jfr
│ ├── ClassLoaderStatistics.java
│ ├── JavaThreadStatistics.java
│ ├── ClassLoadingStatistics.java
│ ├── Shutdown.java
│ ├── Exceptions.java
│ ├── MonitorEnter.java
│ ├── ThreadAllocation.java
│ ├── FileJFR.java
│ ├── Certificates.java
│ ├── SocketClient.java
│ ├── NamedThreadFactory.java
│ ├── SocketServer.java
│ ├── Jfr.java
│ └── AllocationStress.java
├── GC_PHASE_CONCURRENT.md
├── GC_PROMOTION.md
├── GC_REFERENCES.md
├── GC_EVACUATION.md
├── RESERVED_STACK.md
├── pom.xml
├── EXCEPTION.md
├── VM_OPTIONS.md
├── GC_G1_REGIONS.md
├── HEAP.md
├── GC_CONFIGURATION.md
├── SYSTEM.md
├── GC_G1_SPECIFIC.md
├── MODULE.md
├── NATIVE.md
├── JFR_EVENTS.md
├── TABLES.md
├── GC_G1_IHOP.md
├── OLD_OBJECT_SAMPLE.md
├── OBJECT_COUNT.md
├── SAFEPOINT.md
├── EXECUTE_VM_OPERATION.md
├── SHUTDOWN.md
├── OBJECT_ALLOCATION.md
├── SOCKETS.md
├── FILE.md
├── CLASSES.md
├── CODE_CACHE.md
├── GC_Z.md
├── MONITOR.md
├── GC_BASICS.md
├── METASPACE.md
├── COMPILER.md
├── README.md
├── THREADS.md
├── profile-jre.txt
├── default-jre.txt
├── THREAD_DUMP.md
├── CERTIFICATES.md
└── custom-profile.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | # Project exclude paths
2 | /target/
3 | .idea
4 | *.iml
--------------------------------------------------------------------------------
/socket-read.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/petrbouda/jfr-playground/HEAD/socket-read.png
--------------------------------------------------------------------------------
/GC_PARALLEL.md:
--------------------------------------------------------------------------------
1 | # PARALLEL GC
2 |
3 | ```
4 | jdk.ParallelOldGarbageCollection {
5 | startTime = 12:46:43.906
6 | duration = 205 ms
7 | gcId = 86
8 | densePrefix = 0xF0D80000
9 | }
10 | ```
11 |
--------------------------------------------------------------------------------
/GC_SHENANDOAH.md:
--------------------------------------------------------------------------------
1 | # SHENANDOAH GC
2 |
3 | ```
4 | jdk.ShenandoahHeapRegionInformation#enabled: false
5 | jdk.ShenandoahHeapRegionInformation#period: everyChunk
6 | jdk.ShenandoahHeapRegionStateChange#enabled: false
7 | ```
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/ClassLoaderStatistics.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | public class ClassLoaderStatistics {
4 |
5 | public static void main(String[] args) {
6 | Jfr.start("jdk.ClassLoaderStatistics");
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/JavaThreadStatistics.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | public class JavaThreadStatistics {
4 |
5 | public static void main(String[] args) {
6 | Jfr.start("jdk.JavaThreadStatistics");
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/ClassLoadingStatistics.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | public class ClassLoadingStatistics {
4 |
5 | public static void main(String[] args) {
6 | byte[] data = new byte[Integer.MAX_VALUE];
7 | System.out.println();
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/Shutdown.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | public class Shutdown {
4 |
5 | public static void main(String[] args) throws InterruptedException {
6 | Jfr.start("jdk.Shutdown");
7 | Thread.sleep(5_000);
8 | throw new RuntimeException("SCHLUSS");
9 | }
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/Exceptions.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | public class Exceptions {
4 |
5 | public static void main(String[] args) throws InterruptedException {
6 | Jfr.start("jdk.ExceptionStatistics", "jdk.JavaErrorThrow");
7 |
8 | while (true) {
9 | try {
10 | throw new Error("My Error");
11 | } catch (Error ex) {
12 | }
13 |
14 | Thread.sleep(1000);
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/MonitorEnter.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | public class MonitorEnter {
4 |
5 | public static void main(String[] args) {
6 | Jfr.start("jdk.CPUInformation");
7 |
8 | // while (true) {
9 | // innerMethod();
10 | // }
11 | }
12 |
13 | private static void innerMethod() {
14 | System.out.println("Protected Area - " + Thread.currentThread().getName());
15 | int i = 1;
16 | System.out.println(i);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/GC_PHASE_CONCURRENT.md:
--------------------------------------------------------------------------------
1 | # GC PHASE CONCURRENT
2 |
3 | ```
4 | jdk.GCPhaseConcurrent {
5 | startTime = 12:41:53.363
6 | duration = 0.0299 ms
7 | gcId = 138
8 | name = "Concurrent Clear Claimed Marks"
9 | }
10 |
11 |
12 | jdk.GCPhaseConcurrent {
13 | startTime = 12:41:53.363
14 | duration = 15.0 ms
15 | gcId = 138
16 | name = "Concurrent Scan Root Regions"
17 | }
18 |
19 |
20 | jdk.GCPhaseConcurrent {
21 | startTime = 12:41:53.378
22 | duration = 265 ms
23 | gcId = 138
24 | name = "Concurrent Mark From Roots"
25 | }
26 | ```
--------------------------------------------------------------------------------
/GC_PROMOTION.md:
--------------------------------------------------------------------------------
1 | # GC_PROMOTION
2 |
3 | ```
4 | jdk.PromoteObjectInNewPLAB {
5 | startTime = 12:18:49.302
6 | gcId = 200
7 | objectClass = pbouda.jfr.AllocationStress$Contact (classLoader = app)
8 | objectSize = 24 bytes
9 | tenuringAge = 0
10 | tenured = true
11 | plabSize = 30.9 kB
12 | }
13 | ```
14 |
15 | ```
16 | jdk.PromoteObjectOutsidePLAB {
17 | startTime = 12:19:53.604
18 | gcId = 210
19 | objectClass = pbouda.jfr.AllocationStress$Contact[] (classLoader = app)
20 | objectSize = 322.9 kB
21 | tenuringAge = 0
22 | tenured = false
23 | }
24 | ```
--------------------------------------------------------------------------------
/GC_REFERENCES.md:
--------------------------------------------------------------------------------
1 | # GC_REFERENCES
2 |
3 | - `jdk.GCReferenceStatistics`
4 |
5 | ```
6 | jdk.GCReferenceStatistics {
7 | startTime = 10:56:48.668
8 | gcId = 268
9 | type = "Soft reference"
10 | count = 0
11 | }
12 |
13 |
14 | jdk.GCReferenceStatistics {
15 | startTime = 10:56:48.668
16 | gcId = 268
17 | type = "Weak reference"
18 | count = 227
19 | }
20 |
21 |
22 | jdk.GCReferenceStatistics {
23 | startTime = 10:56:48.668
24 | gcId = 268
25 | type = "Final reference"
26 | count = 0
27 | }
28 |
29 |
30 | jdk.GCReferenceStatistics {
31 | startTime = 10:56:48.668
32 | gcId = 268
33 | type = "Phantom reference"
34 | count = 5
35 | }
36 | ```
--------------------------------------------------------------------------------
/GC_EVACUATION.md:
--------------------------------------------------------------------------------
1 | # GC_EVACUATION
2 |
3 | - `jdk.EvacuationFailed`
4 | - `jdk.EvacuationInformation`
5 |
6 | ```
7 | jdk.EvacuationFailed {
8 | startTime = 10:59:35.351
9 | gcId = 252
10 | evacuationFailed = {
11 | objectCount = 23812
12 | firstSize = 3 bytes
13 | smallestSize = 3 bytes
14 | totalSize = 97.6 kB
15 | }
16 | }
17 |
18 |
19 | jdk.EvacuationInformation {
20 | startTime = 10:59:35.351
21 | gcId = 252
22 | cSetRegions = 12
23 | cSetUsedBefore = 12.0 MB
24 | cSetUsedAfter = 10.0 MB
25 | allocationRegions = 7
26 | allocationRegionsUsedBefore = 0 bytes
27 | allocationRegionsUsedAfter = 7.0 MB
28 | bytesCopied = 7.0 MB
29 | regionsFreed = 2
30 | }
31 | ```
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/ThreadAllocation.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | import java.util.concurrent.Executors;
4 | import java.util.concurrent.TimeUnit;
5 |
6 | public class ThreadAllocation {
7 |
8 | public static void main(String[] args) throws InterruptedException {
9 | Jfr.start("jdk.OldObjectSample");
10 |
11 | var scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("allocator"));
12 | scheduler.scheduleWithFixedDelay(ThreadAllocation::allocate, 0, 10, TimeUnit.MILLISECONDS);
13 |
14 | Thread.currentThread().join();
15 | }
16 |
17 | private static String allocate() {
18 | byte[] allocation = new byte[1024 * 512];
19 | return new String(allocation);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/FileJFR.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | import java.io.IOException;
4 | import java.nio.file.Files;
5 | import java.nio.file.Path;
6 |
7 | public class FileJFR {
8 |
9 | public static void main(String[] args) throws IOException, InterruptedException {
10 | // Jfr.start("jdk.FileRead", "jdk.FileWrite", "jdk.FileForce");
11 | Jfr.start("jdk.NativeMethodSample");
12 | Path movie = Path.of("/home/pbouda/movie.avi");
13 |
14 | Thread.sleep(5_000);
15 |
16 | byte[] bytes = Files.readAllBytes(movie);
17 |
18 | Thread.sleep(5_000);
19 |
20 | Files.write(Path.of("/home/pbouda/copy.avi"), bytes);
21 |
22 | Thread.sleep(5_000);
23 |
24 | System.out.println("COMPLETED - " + bytes.length);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/RESERVED_STACK.md:
--------------------------------------------------------------------------------
1 | # RESERVED_STACK_ALLOCATION
2 |
3 | `jdk.ReservedStackActivation`
4 |
5 | ```
6 | Reserve extra space on thread stacks for use by critical sections,
7 | so that they can complete even when stack overflows occur.
8 | ```
9 |
10 | ```
11 | Provide a mechanism to mitigate the risk of deadlocks caused by
12 | the corruption of critical data such as java.util.concurrent locks
13 | (such as ReentrantLock) caused by a StackOverflowError being
14 | thrown in a critical section.
15 |
16 | The solution must be mostly JVM-based in order not to require
17 | modifications to java.util.concurrent algorithms or published
18 | interfaces, or existing library and application code.
19 |
20 | The solution must not be limited to the ReentrantLock case,
21 | and should be applicable to any critical section in privileged code.
22 | ```
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/Certificates.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | import java.net.URI;
4 | import java.net.http.HttpClient;
5 | import java.net.http.HttpRequest;
6 | import java.net.http.HttpResponse;
7 |
8 | public class Certificates {
9 |
10 | public static void main(String[] args) throws InterruptedException {
11 | Jfr.start("jdk.TLSHandshake", "jdk.X509Validation");
12 |
13 | HttpClient client = HttpClient.newHttpClient();
14 | HttpRequest request = HttpRequest.newBuilder()
15 | .uri(URI.create("https://www.google.cz/"))
16 | .build();
17 | client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
18 | .thenApply(HttpResponse::body)
19 | .thenAccept(System.out::println)
20 | .join();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/SocketClient.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | import java.io.DataInputStream;
4 | import java.io.DataOutputStream;
5 | import java.net.Socket;
6 | import java.util.Scanner;
7 |
8 | public class SocketClient {
9 | public static void main(String[] args) throws Exception{
10 | Jfr.start("jdk.SocketRead", "jdk.SocketWrite");
11 | Scanner scn = new Scanner(System.in);
12 |
13 | try (Socket socket = new Socket("localhost", 5056);
14 | DataInputStream dis = new DataInputStream(socket.getInputStream());
15 | DataOutputStream dos = new DataOutputStream(socket.getOutputStream())) {
16 |
17 | while (true) {
18 | System.out.println(dis.readUTF());
19 | String name = scn.nextLine();
20 | dos.writeUTF(name);
21 |
22 | String received = dis.readUTF();
23 | System.out.println(received);
24 | }
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | pbouda
8 | jfr-playground
9 | 1.0-SNAPSHOT
10 |
11 |
12 | 3.8.1
13 | UTF-8
14 |
15 |
16 |
17 |
18 |
19 | org.apache.maven.plugins
20 | maven-compiler-plugin
21 | ${maven-compiler-plugin.version}
22 |
23 | 14
24 | 14
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/EXCEPTION.md:
--------------------------------------------------------------------------------
1 | # EXCEPTION
2 |
3 | #### JAVA_EXCEPTION_STATISTICS
4 |
5 | - `#period: 1000 ms`
6 |
7 | ```
8 | jdk.ExceptionStatistics {
9 | startTime = 15:56:23.646
10 | throwables = 11
11 | eventThread = "JFR Periodic Tasks" (javaThreadId = 16)
12 | }
13 | ```
14 |
15 | #### JAVA_EXCEPTION_THROW
16 |
17 | - by default `disabled`
18 |
19 | ```
20 | jdk.JavaExceptionThrow {
21 | startTime = 15:56:23.949
22 | message = "My Exception"
23 | thrownClass = java.lang.Exception (classLoader = bootstrap)
24 | eventThread = "main" (javaThreadId = 1)
25 | stackTrace = [
26 | java.lang.Throwable.(String) line: 274
27 | java.lang.Exception.(String) line: 67
28 | pbouda.jfr.Exceptions.main(String[]) line: 10
29 | ]
30 | }
31 | ```
32 |
33 | #### JAVA_ERROR_THROW
34 |
35 | - by default `enabled`
36 |
37 | ```
38 | jdk.JavaErrorThrow {
39 | startTime = 15:58:31.383
40 | message = "My Error"
41 | thrownClass = java.lang.Error (classLoader = bootstrap)
42 | eventThread = "main" (javaThreadId = 1)
43 | stackTrace = [
44 | java.lang.Error.(String) line: 72
45 | pbouda.jfr.Exceptions.main(String[]) line: 10
46 | ]
47 | }
48 | ```
--------------------------------------------------------------------------------
/VM_OPTIONS.md:
--------------------------------------------------------------------------------
1 | # VM_OPTIONS
2 |
3 | - VM Options loaded at the startup
4 | - Possibility to handle changes of `Ergonomic` options
5 |
6 | ```
7 | jdk.IntFlag#enabled: true
8 | jdk.IntFlag#period: beginChunk
9 | jdk.UnsignedIntFlag#enabled: true
10 | jdk.UnsignedIntFlag#period: beginChunk
11 | jdk.LongFlag#enabled: true
12 | jdk.LongFlag#period: beginChunk
13 | jdk.UnsignedLongFlag#enabled: true
14 | jdk.UnsignedLongFlag#period: beginChunk
15 | jdk.DoubleFlag#enabled: true
16 | jdk.DoubleFlag#period: beginChunk
17 | jdk.BooleanFlag#enabled: true
18 | jdk.BooleanFlag#period: beginChunk
19 | jdk.StringFlag#enabled: true
20 | jdk.StringFlag#period: beginChunk
21 |
22 | jdk.IntFlagChanged#enabled: true
23 | jdk.UnsignedIntFlagChanged#enabled: true
24 | jdk.LongFlagChanged#enabled: true
25 | jdk.UnsignedLongFlagChanged#enabled: true
26 | jdk.DoubleFlagChanged#enabled: true
27 | jdk.BooleanFlagChanged#enabled: true
28 | jdk.StringFlagChanged#enabled: true
29 | ```
30 |
31 | ```
32 | jdk.LongFlag {
33 | startTime = 09:52:40.647
34 | name = "ObjectAlignmentInBytes"
35 | value = 8
36 | origin = "Default"
37 | }
38 |
39 | jdk.LongFlag {
40 | startTime = 09:52:40.647
41 | name = "CICompilerCount"
42 | value = 4
43 | origin = "Ergonomic"
44 | }
45 |
46 | ...
47 | ```
--------------------------------------------------------------------------------
/GC_G1_REGIONS.md:
--------------------------------------------------------------------------------
1 | #### HEAP REGIONS
2 |
3 | - type of the region changed
4 | - after the evacuation OLD Region change to FREE Region
5 |
6 | ```
7 | jdk.G1HeapRegionTypeChange {
8 | startTime = 12:27:05.633
9 | index = 224
10 | from = "Old"
11 | to = "Free"
12 | start = 0xFE000000
13 | used = 0 bytes
14 | }
15 | ```
16 |
17 | - FREE Region changed to EDEN type
18 |
19 | ```
20 | jdk.G1HeapRegionTypeChange {
21 | startTime = 12:27:07.590
22 | index = 246
23 | from = "Free"
24 | to = "Eden"
25 | start = 0xFF600000
26 | used = 0 bytes
27 | }
28 | ```
29 |
30 | #### HEAP REGION INFORMATION
31 |
32 | ```
33 | jdk.G1HeapRegionInformation {
34 | startTime = 12:30:33.773
35 | index = 70
36 | type = "Old"
37 | start = 0xF4600000
38 | used = 1024.0 kB
39 | }
40 |
41 |
42 | jdk.G1HeapRegionInformation {
43 | startTime = 12:30:33.773
44 | index = 71
45 | type = "Free"
46 | start = 0xF4700000
47 | used = 0 bytes
48 | }
49 |
50 |
51 | jdk.G1HeapRegionInformation {
52 | startTime = 12:30:33.773
53 | index = 254
54 | type = "OpenArchive"
55 | start = 0xFFE00000
56 | used = 328.0 kB
57 | }
58 |
59 |
60 | jdk.G1HeapRegionInformation {
61 | startTime = 12:30:33.773
62 | index = 255
63 | type = "ClosedArchive"
64 | start = 0xFFF00000
65 | used = 504.0 kB
66 | }
67 | ```
--------------------------------------------------------------------------------
/HEAP.md:
--------------------------------------------------------------------------------
1 | # HEAP
2 |
3 | ```
4 | jdk.GCHeapSummary#enabled: true
5 | jdk.PSHeapSummary#enabled: true
6 | jdk.G1HeapSummary#enabled: true
7 | ```
8 |
9 | #### HEAP_SUMMARY
10 |
11 | ```
12 | jdk.GCHeapSummary {
13 | startTime = 12:13:47.734
14 | gcId = 15
15 | when = "Before GC"
16 | heapSpace = {
17 | start = 0xC0000000
18 | committedEnd = 0xE8200000
19 | committedSize = 642.0 MB
20 | reservedEnd = 0x100000000
21 | reservedSize = 1.0 GB
22 | }
23 | heapUsed = 427.8 MB
24 | }
25 |
26 |
27 | jdk.GCHeapSummary {
28 | startTime = 12:13:47.771
29 | gcId = 15
30 | when = "After GC"
31 | heapSpace = {
32 | start = 0xC0000000
33 | committedEnd = 0xEE300000
34 | committedSize = 739.0 MB
35 | reservedEnd = 0x100000000
36 | reservedSize = 1.0 GB
37 | }
38 | heapUsed = 332.8 MB
39 | }
40 | ```
41 |
42 | #### G1_HEAP_SUMMARY
43 |
44 | ```
45 | jdk.G1HeapSummary {
46 | startTime = 12:13:47.734
47 | gcId = 15
48 | when = "Before GC"
49 | edenUsedSize = 151.0 MB
50 | edenTotalSize = 152.0 MB
51 | survivorUsedSize = 24.0 MB
52 | numberOfRegions = 642
53 | }
54 |
55 |
56 | jdk.G1HeapSummary {
57 | startTime = 12:13:47.771
58 | gcId = 15
59 | when = "After GC"
60 | edenUsedSize = 0 bytes
61 | edenTotalSize = 163.0 MB
62 | survivorUsedSize = 22.0 MB
63 | numberOfRegions = 739
64 | }
65 | ```
--------------------------------------------------------------------------------
/GC_CONFIGURATION.md:
--------------------------------------------------------------------------------
1 | # GARBAGE_COLLECTION
2 |
3 | ### Configuration
4 |
5 | - `jdk.GCConfiguration`
6 | - `jdk.GCHeapConfiguration`
7 | - `jdk.YoungGenerationConfiguration`
8 | - `jdk.GCTLABConfiguration`
9 | - `jdk.GCSurvivorConfiguration`
10 | - execution: `#period: beginChunk`
11 |
12 | ```
13 | jdk.GCConfiguration {
14 | startTime = 23:38:17.951
15 | youngCollector = "G1New"
16 | oldCollector = "G1Old"
17 | parallelGCThreads = 8
18 | concurrentGCThreads = 2
19 | usesDynamicGCThreads = true
20 | isExplicitGCConcurrent = false
21 | isExplicitGCDisabled = false
22 | pauseTarget = N/A
23 | gcTimeRatio = 12
24 | }
25 |
26 |
27 | jdk.GCSurvivorConfiguration {
28 | startTime = 23:38:17.951
29 | maxTenuringThreshold = 15
30 | initialTenuringThreshold = 7
31 | }
32 |
33 |
34 | jdk.GCTLABConfiguration {
35 | startTime = 23:38:17.951
36 | usesTLABs = true
37 | minTLABSize = 2.0 kB
38 | tlabRefillWasteLimit = 64 bytes
39 | }
40 |
41 |
42 | jdk.GCHeapConfiguration {
43 | startTime = 23:38:17.951
44 | minSize = 8.0 MB
45 | maxSize = 4.8 GB
46 | initialSize = 310.0 MB
47 | usesCompressedOops = true
48 | compressedOopsMode = "Zero based"
49 | objectAlignment = 8 bytes
50 | heapAddressBits = 32
51 | }
52 |
53 |
54 | jdk.YoungGenerationConfiguration {
55 | startTime = 23:38:17.951
56 | minSize = 1.3 MB
57 | maxSize = 2.9 GB
58 | newRatio = 2
59 | }
60 | ```
--------------------------------------------------------------------------------
/SYSTEM.md:
--------------------------------------------------------------------------------
1 | # SYSTEM
2 |
3 | #### SYSTEM_PROCESS
4 |
5 | - `#period: endChunk`
6 | - set of all system processes
7 |
8 | ```
9 | jdk.SystemProcess {
10 | startTime = 16:10:52.744
11 | pid = "2500"
12 | commandLine = "/home/pbouda/.local/share/JetBrains/Toolbox/bin/jetbrains-toolbox --minimize "
13 | }
14 |
15 |
16 | jdk.SystemProcess {
17 | startTime = 16:10:52.744
18 | pid = "2496"
19 | commandLine = "usr/share/jetbrains-toolbox/jetbrains-toolbox --minimize "
20 | }
21 |
22 |
23 | jdk.SystemProcess {
24 | startTime = 16:10:52.744
25 | pid = "6772"
26 | commandLine = "/opt/google/chrome/chrome --type=renderer --disable-webrtc-apm-in-audio-service --field-trial-handle=9262132349396412343,11079563146144832410,131072 --lang=en-US --disable-oor-cors --enable-auto-reload --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=8394591454617458873 --renderer-client-id=745 --no-v8-untrusted-code-mitigations --shared-files=v8_context_snapshot_data:100,v8_natives_data:101 "
27 | }
28 |
29 | ...
30 | ```
31 |
32 | #### NETWORK_UTILIZATION
33 |
34 | - `#period: 5 s`
35 |
36 | ```
37 | jdk.NetworkUtilization {
38 | startTime = 16:14:21.542
39 | networkInterface = "wlp61s0"
40 | readRate = 376 bps
41 | writeRate = 720 bps
42 | }
43 | ```
44 |
45 | #### PHYSICAL_MEMORY
46 |
47 | - `#period: everyChunk`
48 |
49 | ```
50 | jdk.PhysicalMemory {
51 | startTime = 16:14:10.605
52 | totalSize = 19.4 GB
53 | usedSize = 16.4 GB
54 | }
55 | ```
56 |
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/NamedThreadFactory.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | import java.util.concurrent.ThreadFactory;
4 | import java.util.concurrent.atomic.AtomicInteger;
5 |
6 | public class NamedThreadFactory implements ThreadFactory {
7 |
8 | private final AtomicInteger counter = new AtomicInteger();
9 | private final String prefix;
10 | private final Thread.UncaughtExceptionHandler exceptionHandler;
11 |
12 | /**
13 | * Creates new ThreadFactory instance with a predefined prefix of a thread's name.
14 | *
15 | * @param prefix thread's prefix.
16 | */
17 | public NamedThreadFactory(String prefix) {
18 | this(prefix, null);
19 | }
20 |
21 | /**
22 | * Creates new ThreadFactory instance with a predefined prefix of a thread's name and a handler when completes
23 | * exceptionally.
24 | *
25 | * @param prefix thread's prefix.
26 | * @param exceptionHandler handler to process when thread completes exceptionally.
27 | */
28 | public NamedThreadFactory(String prefix, Thread.UncaughtExceptionHandler exceptionHandler) {
29 | this.prefix = prefix;
30 | this.exceptionHandler = exceptionHandler;
31 | }
32 |
33 | @Override
34 | public Thread newThread(Runnable runnable) {
35 | Thread thread = new Thread(runnable, prefix + "-" + counter.getAndIncrement());
36 | if (exceptionHandler != null) {
37 | thread.setUncaughtExceptionHandler(exceptionHandler);
38 | }
39 | return thread;
40 | }
41 | }
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/SocketServer.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | import java.io.DataInputStream;
4 | import java.io.DataOutputStream;
5 | import java.io.IOException;
6 | import java.net.ServerSocket;
7 | import java.net.Socket;
8 |
9 | public class SocketServer {
10 | public static void main(String[] args) throws IOException {
11 | Jfr.start("jdk.SocketRead", "jdk.SocketWrite");
12 |
13 | try (ServerSocket ss = new ServerSocket(5056)) {
14 | while (true) {
15 | Socket socket = ss.accept();
16 | System.out.println("A new client is connected : " + socket);
17 |
18 | new ClientHandler(socket).start();
19 | }
20 | }
21 | }
22 |
23 |
24 | private static class ClientHandler extends Thread {
25 | private final Socket socket;
26 |
27 | public ClientHandler(Socket socket) {
28 | this.socket = socket;
29 | }
30 |
31 | @Override
32 | public void run() {
33 | try (DataInputStream dis = new DataInputStream(socket.getInputStream());
34 | DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
35 | socket) {
36 |
37 | while (true) {
38 | dos.writeUTF("Tell me your name");
39 | String name = dis.readUTF();
40 | dos.writeUTF("Hello " + name);
41 | }
42 | } catch (IOException e) {
43 | e.printStackTrace();
44 | }
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/GC_G1_SPECIFIC.md:
--------------------------------------------------------------------------------
1 | # G1_SPECIFIC
2 |
3 | ```
4 | jdk.G1EvacuationYoungStatistics {
5 | startTime = 11:02:49.668
6 | statistics = {
7 | gcId = 146
8 | allocated = 2.0 MB
9 | wasted = 800 bytes
10 | used = 2.0 MB
11 | undoWaste = 0 bytes
12 | regionEndWaste = 0 bytes
13 | regionsRefilled = 2 bytes
14 | directAllocated = 0 bytes
15 | failureUsed = 0 bytes
16 | failureWaste = 0 bytes
17 | }
18 | }
19 |
20 |
21 | jdk.G1EvacuationOldStatistics {
22 | startTime = 11:02:49.668
23 | statistics = {
24 | gcId = 146
25 | allocated = 5.8 MB
26 | wasted = 1.0 kB
27 | used = 5.8 MB
28 | undoWaste = 0 bytes
29 | regionEndWaste = 21.0 kB
30 | regionsRefilled = 7 bytes
31 | directAllocated = 220.5 kB
32 | failureUsed = 3.9 MB
33 | failureWaste = 6.1 MB
34 | }
35 | }
36 |
37 |
38 | jdk.G1MMU {
39 | startTime = 11:02:49.668
40 | gcId = 146
41 | timeSlice = 201 ms
42 | gcTime = 66.0 ms
43 | pauseTarget = 200 ms
44 | }
45 | ```
46 |
47 | #### G1 SPECIFIC EVENTS
48 |
49 | ```
50 | jdk.G1GarbageCollection {
51 | startTime = 00:06:26.297
52 | duration = 8.54 ms
53 | gcId = 206
54 | type = "During Mark"
55 | }
56 |
57 |
58 | jdk.G1GarbageCollection {
59 | startTime = 00:06:26.547
60 | duration = 19.1 ms
61 | gcId = 208
62 | type = "Normal"
63 | }
64 |
65 |
66 | jdk.G1GarbageCollection {
67 | startTime = 00:06:26.572
68 | duration = 11.2 ms
69 | gcId = 209
70 | type = "Initial Mark"
71 | }
72 |
73 | ```
74 |
75 | #### CONCURRENT_MODE_FAILURE
76 |
77 | ```
78 | jdk.ConcurrentModeFailure {
79 | startTime = 12:21:08.568
80 | gcId = 267
81 | }
82 | ```
--------------------------------------------------------------------------------
/MODULE.md:
--------------------------------------------------------------------------------
1 | # MODULE
2 |
3 | - `#period: endChunk`
4 |
5 | #### MODULE_REQUIRE
6 |
7 | ```
8 | jdk.ModuleRequire {
9 | startTime = 16:36:17.394
10 | source = {
11 | name = "java.transaction.xa"
12 | version = "14-ea"
13 | location = "jrt:/java.transaction.xa"
14 | classLoader = jdk.internal.loader.ClassLoaders$PlatformClassLoader (id = 4)
15 | }
16 | requiredModule = {
17 | name = "java.base"
18 | version = "14-ea"
19 | location = "jrt:/java.base"
20 | classLoader = null }
21 | }
22 |
23 |
24 | jdk.ModuleRequire {
25 | startTime = 16:36:17.394
26 | source = {
27 | name = "jdk.charsets"
28 | version = "14-ea"
29 | location = "jrt:/jdk.charsets"
30 | classLoader = jdk.internal.loader.ClassLoaders$PlatformClassLoader (id = 4)
31 | }
32 | requiredModule = {
33 | name = "java.base"
34 | version = "14-ea"
35 | location = "jrt:/java.base"
36 | classLoader = null }
37 | }
38 |
39 | ...
40 | ```
41 |
42 | #### MODULE_EXPORT
43 |
44 | ```
45 | jdk.ModuleExport {
46 | startTime = 16:38:34.186
47 | exportedPackage = {
48 | name = "javax/swing/colorchooser"
49 | module = {
50 | name = "java.desktop"
51 | version = "14-ea"
52 | location = "jrt:/java.desktop"
53 | classLoader = null }
54 | exported = true
55 | }
56 | targetModule = N/A
57 | }
58 |
59 |
60 | jdk.ModuleExport {
61 | startTime = 16:38:34.186
62 | exportedPackage = {
63 | name = "java/time/format"
64 | module = {
65 | name = "java.base"
66 | version = "14-ea"
67 | location = "jrt:/java.base"
68 | classLoader = null }
69 | exported = true
70 | }
71 | targetModule = N/A
72 | }
73 |
74 | ...
75 | ```
--------------------------------------------------------------------------------
/NATIVE.md:
--------------------------------------------------------------------------------
1 | # NATIVE
2 |
3 | #### NATIVE_METHOD_SAMPLE
4 |
5 | - `#period: 20 ms`
6 | - `ctrl-break` just waits on read operation
7 |
8 | ```
9 | jdk.NativeMethodSample {
10 | startTime = 16:02:33.251
11 | sampledThread = "Monitor Ctrl-Break" (javaThreadId = 12)
12 | state = "STATE_RUNNABLE"
13 | stackTrace = [
14 | sun.nio.ch.SocketDispatcher.read0(FileDescriptor, long, int) line: 0
15 | sun.nio.ch.SocketDispatcher.read(FileDescriptor, long, int) line: 0
16 | sun.nio.ch.NioSocketImpl.tryRead(FileDescriptor, byte[], int, int) line: 0
17 | sun.nio.ch.NioSocketImpl.implRead(byte[], int, int) line: 0
18 | sun.nio.ch.NioSocketImpl.read(byte[], int, int) line: 0
19 | ...
20 | ]
21 | }
22 |
23 |
24 | jdk.NativeMethodSample {
25 | startTime = 16:02:33.304
26 | sampledThread = "main" (javaThreadId = 1)
27 | state = "STATE_RUNNABLE"
28 | stackTrace = [
29 | sun.nio.ch.FileDispatcherImpl.read0(FileDescriptor, long, int) line: 0
30 | sun.nio.ch.FileDispatcherImpl.read(FileDescriptor, long, int) line: 0
31 | sun.nio.ch.IOUtil.readIntoNativeBuffer(FileDescriptor, ByteBuffer, long, boolean, int, NativeDispatcher) line: 0
32 | sun.nio.ch.IOUtil.read(FileDescriptor, ByteBuffer, long, boolean, int, NativeDispatcher) line: 0
33 | sun.nio.ch.FileChannelImpl.read(ByteBuffer) line: 0
34 | ...
35 | ]
36 | }
37 | ```
38 |
39 | #### NATIVE_LIBRARY
40 |
41 | ```
42 | jdk.NativeLibrary {
43 | startTime = 16:05:56.569
44 | name = "13502329"
45 | baseAddress = 0x00400000
46 | topAddress = 0x00401000
47 | }
48 |
49 |
50 | jdk.NativeLibrary {
51 | startTime = 16:05:56.569
52 | name = "13502329"
53 | baseAddress = 0x00401000
54 | topAddress = 0x00402000
55 | }
56 |
57 | ...
58 | ```
--------------------------------------------------------------------------------
/JFR_EVENTS.md:
--------------------------------------------------------------------------------
1 | # JFR_EVENTS
2 |
3 | ```
4 | jdk.ActiveRecording#enabled: true
5 | jdk.ActiveSetting#enabled: true
6 | jdk.Flush#enabled: true
7 | jdk.Flush#threshold: 0 ns
8 | jdk.FlushStorage#enabled: true
9 | jdk.FlushStorage#threshold: 0 ns
10 | jdk.FlushStacktrace#enabled: true
11 | jdk.FlushStacktrace#threshold: 0 ns
12 | jdk.FlushStringPool#enabled: true
13 | jdk.FlushStringPool#threshold: 0 ns
14 | jdk.FlushMetadata#enabled: true
15 | jdk.FlushMetadata#threshold: 0 ns
16 | jdk.FlushTypeSet#enabled: true
17 | jdk.FlushTypeSet#threshold: 0 ns
18 | jdk.DataLoss#enabled: true
19 | jdk.DumpReason#enabled: true
20 | ```
21 |
22 | ```
23 | jdk.ActiveRecording {
24 | startTime = 16:19:41.508
25 | id = 1
26 | name = "1"
27 | destination = N/A
28 | maxAge = 106751991167 d 7 h
29 | flushInterval = 1.00 s
30 | maxSize = 0 bytes
31 | recordingStart = 16:19:41.237
32 | recordingDuration = 106751991167 d 7 h
33 | eventThread = "jfr-0" (javaThreadId = 14)
34 | }
35 | ```
36 |
37 | ```
38 | jdk.Flush {
39 | startTime = 16:19:42.336
40 | duration = 1.60 ms
41 | flushId = 1
42 | elements = 1148
43 | size = 284.8 kB
44 | }
45 | ```
46 |
47 |
48 | ```
49 | jdk.FlushStorage {
50 | startTime = 16:22:13.454
51 | duration = 1.55 ms
52 | flushId = 3
53 | elements = 21
54 | size = 263.4 kB
55 | }
56 | ```
57 |
58 | ```
59 | jdk.FlushStacktrace {
60 | startTime = 16:22:13.455
61 | duration = 0.218 ms
62 | flushId = 3
63 | elements = 9
64 | size = 938 bytes
65 | }
66 | ```
67 |
68 | ```
69 | jdk.FlushMetadata {
70 | startTime = 16:23:36.835
71 | duration = 0.136 ms
72 | flushId = 1
73 | elements = 1
74 | size = 80.5 kB
75 | }
76 | ```
77 |
78 | ```
79 | jdk.FlushTypeSet {
80 | startTime = 16:23:36.835
81 | duration = 0.816 ms
82 | flushId = 1
83 | elements = 1013
84 | size = 23.0 kB
85 | }
86 | ```
--------------------------------------------------------------------------------
/TABLES.md:
--------------------------------------------------------------------------------
1 | ```
2 | jdk.SymbolTableStatistics {
3 | startTime = 16:32:55.983
4 | bucketCount = 32768
5 | entryCount = 10363
6 | totalFootprint = 798.8 kB
7 | bucketCountMaximum = 4
8 | bucketCountAverage = 0.31625366
9 | bucketCountVariance = 0.31322214
10 | bucketCountStandardDeviation = 0.5596625
11 | insertionRate = 2551.0
12 | removalRate = 2.0
13 | }
14 |
15 |
16 | jdk.StringTableStatistics {
17 | startTime = 16:32:55.985
18 | bucketCount = 65536
19 | entryCount = 2221
20 | totalFootprint = 686.5 kB
21 | bucketCountMaximum = 2
22 | bucketCountAverage = 0.03388977
23 | bucketCountVariance = 0.03353471
24 | bucketCountStandardDeviation = 0.18312486
25 | insertionRate = 1468.0
26 | removalRate = 0.0
27 | }
28 |
29 |
30 | jdk.PlaceholderTableStatistics {
31 | startTime = 16:32:55.985
32 | bucketCount = 1009
33 | entryCount = 0
34 | totalFootprint = 7.9 kB
35 | bucketCountMaximum = 0
36 | bucketCountAverage = 0.0
37 | bucketCountVariance = 0.0
38 | bucketCountStandardDeviation = 0.0
39 | insertionRate = 235.0
40 | removalRate = 235.0
41 | }
42 |
43 |
44 | jdk.LoaderConstraintsTableStatistics {
45 | startTime = 16:32:55.985
46 | bucketCount = 107
47 | entryCount = 14
48 | totalFootprint = 1.2 kB
49 | bucketCountMaximum = 2
50 | bucketCountAverage = 0.13084112
51 | bucketCountVariance = 0.1511049
52 | bucketCountStandardDeviation = 0.38872215
53 | insertionRate = 1.0
54 | removalRate = 0.0
55 | }
56 |
57 |
58 | jdk.ProtectionDomainCacheTableStatistics {
59 | startTime = 16:32:55.985
60 | bucketCount = 1009
61 | entryCount = 3
62 | totalFootprint = 8.0 kB
63 | bucketCountMaximum = 1
64 | bucketCountAverage = 0.0029732408
65 | bucketCountVariance = 0.0029644007
66 | bucketCountStandardDeviation = 0.05444631
67 | insertionRate = 1.0
68 | removalRate = 0.0
69 | }
70 | ```
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/Jfr.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | import jdk.jfr.Configuration;
4 | import jdk.jfr.consumer.EventStream;
5 | import jdk.jfr.consumer.RecordingStream;
6 |
7 | import java.io.IOException;
8 | import java.nio.file.Path;
9 | import java.text.ParseException;
10 | import java.util.concurrent.ExecutorService;
11 | import java.util.concurrent.Executors;
12 |
13 | public class Jfr {
14 |
15 | public static void main(String[] args) throws InterruptedException {
16 | Jfr.start("jdk.LongFlag");
17 | Thread.currentThread().join();
18 | }
19 |
20 | public static void start(String... events) {
21 | Configuration config;
22 | try {
23 | config = Configuration.create(Path.of("custom-profile.xml"));
24 | // config = Configuration.getConfiguration("profile");
25 | } catch (IOException | ParseException e) {
26 | throw new RuntimeException(e);
27 | }
28 |
29 | System.out.println(config.getDescription());
30 | System.out.println("settings:");
31 | config.getSettings().forEach((key, value) -> System.out.println(key + ": " + value));
32 |
33 | ExecutorService executor = Executors.newSingleThreadExecutor(new NamedThreadFactory("jfr"));
34 | executor.submit(() -> {
35 | try (EventStream es = new RecordingStream(config)) {
36 | for (String event : events) {
37 | es.onEvent(event, System.out::println);
38 | }
39 |
40 | Runtime.getRuntime().addShutdownHook(new Thread(() -> {
41 | try {
42 | es.awaitTermination();
43 | } catch (InterruptedException e) {
44 | e.printStackTrace();
45 | }
46 | }));
47 |
48 | es.start();
49 | }
50 | });
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/GC_G1_IHOP.md:
--------------------------------------------------------------------------------
1 | # IHOP (The Initiating Heap Occupancy Percent)
2 |
3 | The Initiating Heap Occupancy Percent (IHOP) is the threshold at which an
4 | Initial Mark collection is triggered and it is defined as a percentage of
5 | the old generation size.
6 |
7 | G1 by default automatically determines an optimal IHOP by observing how
8 | long marking takes and how much memory is typically allocated in the old
9 | generation during marking cycles. This feature is called Adaptive IHOP.
10 | If this feature is active, then the option `-XX:InitiatingHeapOccupancyPercent`
11 | determines the initial value as a percentage of the size of the current old
12 | generation as long as there aren't enough observations to make a good
13 | prediction of the Initiating Heap Occupancy threshold. Turn off this
14 | behavior of G1 using the option `-XX:-G1UseAdaptiveIHOP`. In this case,
15 | the value of `-XX:InitiatingHeapOccupancyPercent` always determines this threshold.
16 |
17 | Internally, Adaptive IHOP tries to set the Initiating Heap Occupancy
18 | so that the first mixed garbage collection of the space-reclamation
19 | phase starts when the old generation occupancy is at a current maximum
20 | old generation size minus the value of `-XX:G1HeapReservePercent` as the
21 | extra buffer.
22 |
23 |
24 | ```
25 | jdk.G1BasicIHOP {
26 | startTime = 11:06:11.545
27 | gcId = 201
28 | threshold = 115.2 MB
29 | thresholdPercentage = 45.00%
30 | targetOccupancy = 256.0 MB
31 | currentOccupancy = 121.9 MB
32 | recentMutatorAllocationSize = 31.2 MB
33 | recentMutatorDuration = 14.0 ms
34 | recentAllocationRate = 2.1 GB/s
35 | lastMarkingDuration = 0 s
36 | }
37 |
38 |
39 | jdk.G1AdaptiveIHOP {
40 | startTime = 11:06:11.545
41 | gcId = 201
42 | threshold = 115.2 MB
43 | thresholdPercentage = 52.94%
44 | ihopTargetOccupancy = 217.6 MB
45 | currentOccupancy = 40.0 MB
46 | additionalBufferSize = 121.9 MB
47 | predictedAllocationRate = 3.9 GB/s
48 | predictedMarkingDuration = 0 s
49 | predictionActive = false
50 | }
51 |
52 | ```
--------------------------------------------------------------------------------
/OLD_OBJECT_SAMPLE.md:
--------------------------------------------------------------------------------
1 | # OLD_OBJECT_SAMPLE
2 |
3 | - `jdk.OldObjectSample`
4 | - execution: `#cutoff: 0 ns` (how long to search for references)
5 | - JFR contains internal priority queue that keeps 256 objects (by default)
6 | - the priority becomes higher for neighbours when an object is garbage-collected
7 | - weak-references - objects are collected and automatically deleted from the queue
8 | - the latest ones (survivals) become `OldObjectSample`
9 | - paths-to-gc-roots you also get the reference chains:
10 | - `-XX:StartFlightRecording=path-to-gc-roots=true`
11 | - `jcmd JFR.dump path-to-gc-roots=true`
12 | - the number of objects to track:
13 | - `-XX:FlightRecordingOptions=old-object-queue-size=256`
14 | - dump the queue at the end of the recording.
15 |
16 | Information from the event:
17 | - Time of allocation
18 | - The thread doing the allocation
19 | - The last known heap usage at the time of allocation
20 | - Which can be used to plot the live set,
21 | even if we don’t have data from the time of allocation anymore
22 | - The allocation stack trace (In other words, where was this object allocated?)
23 | - The reference chain back to the GC root at the time of dumping the recording
24 | - In other words, who is still holding on to this object?
25 | - The address of the object
26 |
27 | ```
28 | jdk.OldObjectSample {
29 | startTime = 14:21:37.294
30 | allocationTime = 14:21:36.222
31 | objectAge = 1.07 s
32 | lastKnownHeapUsage = 59.2 MB
33 | object = [
34 | byte[31]
35 | ]
36 | arrayElements = 31
37 | root = N/A
38 | eventThread = "pool-1-thread-2" (javaThreadId = 16)
39 | stackTrace = [
40 | jdk.internal.misc.Unsafe.allocateUninitializedArray(Class, int) line: 1387
41 | java.lang.StringConcatHelper.newArray(long) line: 458
42 | java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(Object, long)
43 | java.lang.invoke.LambdaForm$MH.141200640.invoke(Object, int, Object)
44 | java.lang.invoke.Invokers$Holder.linkToTargetMethod(int, Object, Object)
45 | ...
46 | ]
47 | }
48 | ```
--------------------------------------------------------------------------------
/OBJECT_COUNT.md:
--------------------------------------------------------------------------------
1 | # OBJECT_COUNT
2 |
3 | ```
4 | jdk.ObjectCount#enabled: false
5 | jdk.ObjectCount#period: everyChunk
6 | jdk.ObjectCountAfterGC#enabled: false
7 | ```
8 |
9 | ```
10 | jdk.ObjectCount {
11 | startTime = 12:18:00.960
12 | gcId = 19
13 | objectClass = int[] (classLoader = bootstrap)
14 | count = 1119
15 | totalSize = 4.0 MB
16 | }
17 |
18 |
19 | jdk.ObjectCountAfterGC {
20 | startTime = 12:18:00.960
21 | gcId = 19
22 | objectClass = int[] (classLoader = bootstrap)
23 | count = 1119
24 | totalSize = 4.0 MB
25 | }
26 |
27 |
28 | jdk.ObjectCount {
29 | startTime = 12:18:00.960
30 | gcId = 19
31 | objectClass = byte[] (classLoader = bootstrap)
32 | count = 2395455
33 | totalSize = 111.3 MB
34 | }
35 |
36 |
37 | jdk.ObjectCountAfterGC {
38 | startTime = 12:18:00.960
39 | gcId = 19
40 | objectClass = byte[] (classLoader = bootstrap)
41 | count = 2395455
42 | totalSize = 111.3 MB
43 | }
44 |
45 |
46 | jdk.ObjectCount {
47 | startTime = 12:18:00.960
48 | gcId = 19
49 | objectClass = pbouda.jfr.AllocationStress$Contact (classLoader = app)
50 | count = 1088824
51 | totalSize = 24.9 MB
52 | }
53 |
54 |
55 | jdk.ObjectCountAfterGC {
56 | startTime = 12:18:00.960
57 | gcId = 19
58 | objectClass = pbouda.jfr.AllocationStress$Contact (classLoader = app)
59 | count = 1088824
60 | totalSize = 24.9 MB
61 | }
62 |
63 |
64 | jdk.ObjectCount {
65 | startTime = 12:18:00.960
66 | gcId = 19
67 | objectClass = pbouda.jfr.AllocationStress$Contact[] (classLoader = app)
68 | count = 31
69 | totalSize = 5.7 MB
70 | }
71 |
72 |
73 | jdk.ObjectCountAfterGC {
74 | startTime = 12:18:00.960
75 | gcId = 19
76 | objectClass = pbouda.jfr.AllocationStress$Contact[] (classLoader = app)
77 | count = 31
78 | totalSize = 5.7 MB
79 | }
80 |
81 |
82 | jdk.ObjectCount {
83 | startTime = 12:18:00.960
84 | gcId = 19
85 | objectClass = java.lang.String (classLoader = bootstrap)
86 | count = 2193725
87 | totalSize = 50.2 MB
88 | }
89 |
90 |
91 | jdk.ObjectCountAfterGC {
92 | startTime = 12:18:00.960
93 | gcId = 19
94 | objectClass = java.lang.String (classLoader = bootstrap)
95 | count = 2193725
96 | totalSize = 50.2 MB
97 | }
98 |
99 | ```
--------------------------------------------------------------------------------
/SAFEPOINT.md:
--------------------------------------------------------------------------------
1 | # SAFEPOINT
2 |
3 | #### SAFEPOINT_START AND SAFEPOINT_END
4 |
5 | - `#threshold: 0 ms`
6 |
7 | ```
8 | jdk.SafepointBegin {
9 | startTime = 11:09:07.380
10 | duration = 0.117 ms
11 | safepointId = 25
12 | totalThreadCount = 22
13 | jniCriticalThreadCount = 0
14 | eventThread = "VM Thread" (osThreadId = 18787)
15 | }
16 |
17 |
18 | jdk.SafepointEnd {
19 | startTime = 11:09:07.380
20 | duration = 0.0125 ms
21 | safepointId = 25
22 | eventThread = "VM Thread" (osThreadId = 18787)
23 | }
24 |
25 |
26 | jdk.SafepointBegin {
27 | startTime = 11:09:07.398
28 | duration = 0.130 ms
29 | safepointId = 26
30 | totalThreadCount = 22
31 | jniCriticalThreadCount = 0
32 | eventThread = "VM Thread" (osThreadId = 18787)
33 | }
34 |
35 |
36 | jdk.SafepointEnd {
37 | startTime = 11:09:07.548
38 | duration = 0.0216 ms
39 | safepointId = 26
40 | eventThread = "VM Thread" (osThreadId = 18787)
41 | }
42 |
43 | ...
44 | ```
45 |
46 | #### SAFEPOINT_STATE_SYNCHRONIZATION
47 |
48 | ```
49 | jdk.SafepointStateSynchronization {
50 | startTime = 11:12:40.809
51 | duration = 0.0832 ms
52 | safepointId = 19
53 | initialThreadCount = 5
54 | runningThreadCount = 0
55 | iterations = 3
56 | eventThread = "VM Thread" (osThreadId = 19116)
57 | }
58 | ```
59 |
60 | #### SAFEPOINT_CLEANUP AND SAFEPOINT_CLEANUP_TASK
61 |
62 | ```
63 | jdk.SafepointCleanupTask {
64 | startTime = 11:14:21.358
65 | duration = 0.000171 ms
66 | safepointId = 71
67 | name = "deflating global idle monitors"
68 | eventThread = "VM Thread" (osThreadId = 19278)
69 | }
70 |
71 |
72 | jdk.SafepointCleanupTask {
73 | startTime = 11:14:21.358
74 | duration = 0.000239 ms
75 | safepointId = 71
76 | name = "updating inline caches"
77 | eventThread = "VM Thread" (osThreadId = 19278)
78 | }
79 |
80 |
81 | jdk.SafepointCleanupTask {
82 | startTime = 11:14:21.358
83 | duration = 0.000220 ms
84 | safepointId = 71
85 | name = "compilation policy safepoint handler"
86 | eventThread = "VM Thread" (osThreadId = 19278)
87 | }
88 |
89 |
90 | jdk.SafepointCleanup {
91 | startTime = 11:14:21.358
92 | duration = 0.0222 ms
93 | safepointId = 71
94 | eventThread = "VM Thread" (osThreadId = 19278)
95 | }
96 | ```
--------------------------------------------------------------------------------
/EXECUTE_VM_OPERATION.md:
--------------------------------------------------------------------------------
1 | # EXECUTE_VM_OPERATION
2 |
3 | - `threshold: 0 ms`
4 | - useful if you want to log only long running VM Operations
5 |
6 | ```
7 | jdk.ExecuteVMOperation {
8 | startTime = 11:19:38.029
9 | duration = 0.00209 ms
10 | operation = "JFROldObject"
11 | safepoint = true
12 | blocking = true
13 | caller = "jfr-0" (javaThreadId = 14)
14 | safepointId = 18
15 | eventThread = "VM Thread" (osThreadId = 19742)
16 | }
17 |
18 |
19 | jdk.ExecuteVMOperation {
20 | startTime = 11:19:38.049
21 | duration = 37.4 ms
22 | operation = "GenCollectForAllocation"
23 | safepoint = true
24 | blocking = true
25 | caller = "pool-1-thread-1" (javaThreadId = 15)
26 | safepointId = 19
27 | eventThread = "VM Thread" (osThreadId = 19742)
28 | }
29 |
30 |
31 | jdk.ExecuteVMOperation {
32 | startTime = 11:19:38.098
33 | duration = 4.18 ms
34 | operation = "RedefineClasses"
35 | safepoint = true
36 | blocking = true
37 | caller = "jfr-0" (javaThreadId = 14)
38 | safepointId = 20
39 | eventThread = "VM Thread" (osThreadId = 19742)
40 | }
41 |
42 |
43 | jdk.ExecuteVMOperation {
44 | startTime = 11:19:38.109
45 | duration = 131 ms
46 | operation = "GenCollectForAllocation"
47 | safepoint = true
48 | blocking = true
49 | caller = "pool-1-thread-3" (javaThreadId = 17)
50 | safepointId = 21
51 | eventThread = "VM Thread" (osThreadId = 19742)
52 | }
53 |
54 |
55 | jdk.ExecuteVMOperation {
56 | startTime = 11:19:38.246
57 | duration = 0.111 ms
58 | operation = "ClassLoaderStatsOperation"
59 | safepoint = true
60 | blocking = true
61 | caller = "jfr-0" (javaThreadId = 14)
62 | safepointId = 22
63 | eventThread = "VM Thread" (osThreadId = 19742)
64 | }
65 |
66 | ...
67 |
68 | jdk.ExecuteVMOperation {
69 | startTime = 11:19:41.891
70 | duration = 176 ms
71 | operation = "GenCollectForAllocation"
72 | safepoint = true
73 | blocking = true
74 | caller = "pool-1-thread-1" (javaThreadId = 15)
75 | safepointId = 53
76 | eventThread = "VM Thread" (osThreadId = 19742)
77 | }
78 |
79 |
80 | jdk.ExecuteVMOperation {
81 | startTime = 11:19:42.067
82 | duration = 0.122 ms
83 | operation = "ClassLoaderStatsOperation"
84 | safepoint = true
85 | blocking = true
86 | caller = "JFR: Shutdown Hook" (javaThreadId = 23)
87 | safepointId = 54
88 | eventThread = "VM Thread" (osThreadId = 19742)
89 | }
90 |
91 | ```
--------------------------------------------------------------------------------
/SHUTDOWN.md:
--------------------------------------------------------------------------------
1 | # SHUTDOWN
2 |
3 | - `System.exit(1)`
4 |
5 | ```
6 | jdk.Shutdown {
7 | startTime = 11:27:06.295
8 | reason = "Shutdown requested from Java"
9 | eventThread = "main" (javaThreadId = 1)
10 | stackTrace = [
11 | java.lang.Shutdown.beforeHalt()
12 | java.lang.Shutdown.exit(int) line: 173
13 | java.lang.Runtime.exit(int) line: 114
14 | java.lang.System.exit(int) line: 1783
15 | pbouda.jfr.Shutdown.main(String[]) line: 8
16 | ...
17 | ]
18 | }
19 | ```
20 |
21 | - `SIGKINT` - interrupt
22 |
23 | ```
24 | jdk.Shutdown {
25 | startTime = 11:35:54.311
26 | reason = "Shutdown requested from Java"
27 | eventThread = "SIGINT handler" (javaThreadId = 22)
28 | stackTrace = [
29 | java.lang.Shutdown.beforeHalt()
30 | java.lang.Shutdown.exit(int) line: 173
31 | java.lang.Terminator$1.handle(Signal) line: 51
32 | jdk.internal.misc.Signal$1.run() line: 220
33 | java.lang.Thread.run() line: 832
34 | ...
35 | ]
36 | }
37 | ```
38 |
39 | #### Linux Signals
40 |
41 | ```
42 | SIGINT is the interrupt signal. The terminal sends it to the foreground
43 | process when the user presses ctrl-c. The default behavior is to terminate
44 | the process, but it can be caught or ignored. The intention is to provide
45 | a mechanism for an orderly, graceful shutdown.
46 |
47 | SIGQUIT is the dump core signal. The terminal sends it to the foreground
48 | process when the user presses ctrl-\. The default behavior is to terminate
49 | the process and dump core, but it can be caught or ignored. The intention
50 | is to provide a mechanism for the user to abort the process. You can look
51 | at SIGINT as "user-initiated happy termination" and SIGQUIT as
52 | "user-initiated unhappy termination."
53 |
54 | SIGTERM is the termination signal. The default behavior is to terminate
55 | the process, but it also can be caught or ignored. The intention is to
56 | kill the process, gracefully or not, but to first allow it a chance to
57 | cleanup.
58 |
59 | SIGKILL is the kill signal. The only behavior is to kill the process,
60 | immediately. As the process cannot catch the signal, it cannot cleanup,
61 | and thus this is a signal of last resort.
62 |
63 | SIGSTOP is the pause signal. The only behavior is to pause the process;
64 | the signal cannot be caught or ignored. The shell uses pausing (and its
65 | counterpart, resuming via SIGCONT) to implement job control.
66 | ```
--------------------------------------------------------------------------------
/OBJECT_ALLOCATION.md:
--------------------------------------------------------------------------------
1 | # OBJECT_ALLOCATION
2 |
3 | - TLAB is Thread-Local Allocation Buffer and is always dedicated to one thread
4 | - the thread allocates new objects into TLAB to avoid contention among other threads
5 | - if TLAB is full then the thread receives from GC a new TLAB to allocate to
6 | - if there is no TLAB available at the certain moment then allocate the object outside a TLAB to shared memory (synchronization)
7 |
8 | ```
9 | jdk.ObjectAllocationInNewTLAB#enabled: true
10 | jdk.ObjectAllocationInNewTLAB#stackTrace: true
11 | jdk.ObjectAllocationOutsideTLAB#enabled: true
12 | jdk.ObjectAllocationOutsideTLAB#stackTrace: true
13 | ```
14 |
15 | #### OBJECT_ALLOCATION_IN_NEW_TLAB
16 |
17 | - the event is emitted always when we need to created a new TLAB for the given thread to be able to allocation the object
18 | - the bigger TLABs we have the less objects we produce
19 | - the same technique is used even in profilers such as `AsyncProfiler` when me measure object allocation
20 |
21 | ```
22 | jdk.ObjectAllocationInNewTLAB {
23 | startTime = 12:29:02.559
24 | objectClass = java.lang.String (classLoader = bootstrap)
25 | allocationSize = 24 bytes
26 | tlabSize = 512.0 kB
27 | eventThread = "pool-1-thread-2" (javaThreadId = 16)
28 | stackTrace = [
29 | java.lang.StringConcatHelper.newString(byte[], long) line: 397
30 | java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(Object, Object, long)
31 | java.lang.invoke.LambdaForm$MH.1186189638.invoke(Object, int, Object)
32 | java.lang.invoke.Invokers$Holder.linkToTargetMethod(int, Object, Object)
33 | pbouda.jfr.AllocationStress$Utility.generate(String, int, int, int, int) line: 110
34 | ...
35 | ]
36 | }
37 | ```
38 |
39 | #### OBJECT_ALLOCATION_OUTSIDE_TLAB
40 |
41 | - the event is emitted always for an allocation outside the TLAB
42 | - this is a bad hint because our thread is not able to withstand the allocation inside TLAB
43 |
44 | ```
45 | jdk.ObjectAllocationOutsideTLAB {
46 | startTime = 12:29:02.563
47 | objectClass = pbouda.jfr.AllocationStress$Contact[] (classLoader = app)
48 | allocationSize = 276.3 kB
49 | eventThread = "pool-1-thread-4" (javaThreadId = 18)
50 | stackTrace = [
51 | pbouda.jfr.AllocationStress$Utility.generate(String, int, int, int, int) line: 108
52 | pbouda.jfr.AllocationStress.lambda$main$0(AtomicInteger) line: 34
53 | pbouda.jfr.AllocationStress$$Lambda$22.443308702.run()
54 | java.util.concurrent.Executors$RunnableAdapter.call() line: 515
55 | java.util.concurrent.FutureTask.runAndReset() line: 305
56 | ...
57 | ]
58 | }
59 | ```
--------------------------------------------------------------------------------
/SOCKETS.md:
--------------------------------------------------------------------------------
1 | # SOCKETS
2 |
3 | - https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/performissues005.html
4 |
5 | #### SOCKET_READ
6 |
7 | - `jdk.SocketRead`
8 | - `#threshold: 10 ms`
9 | - it can be very high if an application uses `Blocking I/O` because it's waiting for `read` operation
10 | - `Non-Blocking I/O` does not impact monitoring and does not emit SocketRead events
11 |
12 | ```
13 | jdk.SocketRead {
14 | startTime = 19:33:10.386
15 | duration = 36.5 s
16 | host = "localhost"
17 | address = "127.0.0.1"
18 | port = 54336
19 | timeout = 0 s
20 | bytesRead = 1 byte
21 | endOfStream = false
22 | eventThread = "Thread-2" (javaThreadId = 23)
23 | stackTrace = [
24 | java.net.Socket$SocketInputStream.read(byte[], int, int) line: 68
25 | java.net.Socket$SocketInputStream.read() line: 977
26 | java.io.DataInputStream.readUnsignedShort() line: 341
27 | java.io.DataInputStream.readUTF(DataInput) line: 593
28 | java.io.DataInputStream.readUTF() line: 568
29 | ...
30 | ]
31 | }
32 | ```
33 |
34 | - JVM very often emits events for RMI TCP belonging to Serviceablility Agent
35 |
36 | ```
37 | jdk.SocketRead {
38 | startTime = 19:59:11.341
39 | duration = 382 ms
40 | host = "localhost"
41 | address = "127.0.0.1"
42 | port = 44604
43 | timeout = 2 h 0 m
44 | bytesRead = 1 byte
45 | endOfStream = false
46 | eventThread = "RMI TCP Connection(idle)" (javaThreadId = 30)
47 | stackTrace = [
48 | java.net.Socket$SocketInputStream.read(byte[], int, int) line: 68
49 | java.io.BufferedInputStream.fill() line: 244
50 | java.io.BufferedInputStream.read() line: 263
51 | java.io.FilterInputStream.read() line: 82
52 | sun.rmi.transport.tcp.TCPTransport.handleMessages(Connection, boolean) line: 569
53 | ...
54 | ]
55 | }
56 | ```
57 |
58 | - `Blocking I/O` has a problem that it reads one byte after another, therefore, there are only one-byte reads even if the message is a name
59 | - Is it true? even if `java.net.Socket$SocketInputStream.read(byte[], int, int) line: 68`
60 |
61 | 
62 |
63 | #### SOCKET_WRITE
64 |
65 | - `jdk.SocketRead`
66 | - `#threshold: 10 ms`
67 | - it's not so often to see high write duration, because data is written immediately
68 | - we can find an issue with `TCP WRITE BUFFERS` if it's full, then `write` is blocked for a long time
69 |
70 | ```
71 | jdk.SocketWrite {
72 | startTime = 19:33:10.341
73 | duration = 20.9 ms
74 | host = "localhost"
75 | address = "127.0.0.1"
76 | port = 54336
77 | bytesWritten = 69 bytes
78 | eventThread = "Thread-2" (javaThreadId = 23)
79 | stackTrace = [
80 | java.net.Socket$SocketOutputStream.write(byte[], int, int) line: 65
81 | java.io.DataOutputStream.write(byte[], int, int) line: 106
82 | java.io.DataOutputStream.writeUTF(String, DataOutput) line: 397
83 | java.io.DataOutputStream.writeUTF(String) line: 325
84 | pbouda.jfr.ClientHandler.run() line: 75
85 | ...
86 | ]
87 | }
88 | ```
89 |
90 |
91 |
--------------------------------------------------------------------------------
/FILE.md:
--------------------------------------------------------------------------------
1 | # FILE
2 |
3 | #### FILE_FORCE
4 |
5 | - NOT REPRODUCED
6 | - Description: `force updates to be written to file`
7 |
8 | ```
9 | jdk.FileForce#enabled: true
10 | jdk.FileForce#stackTrace: true
11 | jdk.FileForce#threshold: 10 ms
12 | ```
13 |
14 | #### FILE_READ
15 |
16 | - only one emitted event
17 | - `ChannelInputStream` automatically allocate `HeapByteBuffer` with capacity for an entire file
18 | - therefore, we need only one READ operation
19 |
20 | ```
21 | jdk.FileRead {
22 | startTime = 14:59:55.873
23 | duration = 969 ms
24 | path = "/home/pbouda/movie.avi"
25 | bytesRead = 1.1 GB
26 | endOfFile = false
27 | eventThread = "main" (javaThreadId = 1)
28 | stackTrace = [
29 | sun.nio.ch.FileChannelImpl.read(ByteBuffer) line: 83
30 | sun.nio.ch.ChannelInputStream.read(ReadableByteChannel, ByteBuffer, boolean) line: 65
31 | sun.nio.ch.ChannelInputStream.read(ByteBuffer) line: 107
32 | sun.nio.ch.ChannelInputStream.read(byte[], int, int) line: 101
33 | java.nio.file.Files.read(InputStream, int) line: 3228
34 | ...
35 | ]
36 | }
37 | ```
38 |
39 | #### FILE_WRITE
40 |
41 | - one file is written using multiple events
42 | - every event takes `0.167 ms` and writes `8.0 kB` (buffer size)
43 |
44 | ```
45 | ...
46 |
47 | jdk.FileWrite {
48 | startTime = 15:08:53.932
49 | duration = 0.194 ms
50 | path = "/home/pbouda/movie-copy.avi"
51 | bytesWritten = 8.0 kB
52 | eventThread = "main" (javaThreadId = 1)
53 | stackTrace = [
54 | sun.nio.ch.FileChannelImpl.write(ByteBuffer) line: 151
55 | java.nio.channels.Channels.writeFullyImpl(WritableByteChannel, ByteBuffer) line: 74
56 | java.nio.channels.Channels.writeFully(WritableByteChannel, ByteBuffer) line: 97
57 | java.nio.channels.Channels$1.write(byte[], int, int) line: 172
58 | java.nio.file.Files.write(Path, byte[], OpenOption[]) line: 3494
59 | ...
60 | ]
61 | }
62 |
63 |
64 | jdk.FileWrite {
65 | startTime = 15:08:53.932
66 | duration = 0.194 ms
67 | path = "/home/pbouda/movie-copy.avi"
68 | bytesWritten = 8.0 kB
69 | eventThread = "main" (javaThreadId = 1)
70 | stackTrace = [
71 | sun.nio.ch.FileChannelImpl.write(ByteBuffer) line: 151
72 | java.nio.channels.Channels.writeFullyImpl(WritableByteChannel, ByteBuffer) line: 74
73 | java.nio.channels.Channels.writeFully(WritableByteChannel, ByteBuffer) line: 97
74 | java.nio.channels.Channels$1.write(byte[], int, int) line: 172
75 | java.nio.file.Files.write(Path, byte[], OpenOption[]) line: 3494
76 | ...
77 | ]
78 | }
79 |
80 |
81 | jdk.FileWrite {
82 | startTime = 15:08:53.932
83 | duration = 0.194 ms
84 | path = "/home/pbouda/movie-copy.avi"
85 | bytesWritten = 6.1 kB
86 | eventThread = "main" (javaThreadId = 1)
87 | stackTrace = [
88 | sun.nio.ch.FileChannelImpl.write(ByteBuffer) line: 151
89 | java.nio.channels.Channels.writeFullyImpl(WritableByteChannel, ByteBuffer) line: 74
90 | java.nio.channels.Channels.writeFully(WritableByteChannel, ByteBuffer) line: 97
91 | java.nio.channels.Channels$1.write(byte[], int, int) line: 172
92 | java.nio.file.Files.write(Path, byte[], OpenOption[]) line: 3494
93 | ...
94 | ]
95 | }
96 | ```
--------------------------------------------------------------------------------
/CLASSES.md:
--------------------------------------------------------------------------------
1 | # CLASSES
2 |
3 | ## CLASSLOADER
4 |
5 | #### CLASS_LOADER_STATISTICS
6 |
7 | - [custom-profile](custom-profile.xml)
8 | - `jdk.ClassLoaderStatistics`
9 | - generated `everyChunk`
10 | - for every classloader
11 |
12 | ```
13 | jdk.ClassLoaderStatistics {
14 | startTime = 16:18:05.203
15 | classLoader = N/A
16 | parentClassLoader = N/A
17 | classLoaderData = 0x7FA3F827B5E0
18 | classCount = 1568
19 | chunkSize = 4.4 MB
20 | blockSize = 4.0 MB
21 | unsafeAnonymousClassCount = 104
22 | unsafeAnonymousChunkSize = 287.0 kB
23 | unsafeAnonymousBlockSize = 185.2 kB
24 | }
25 |
26 |
27 | jdk.ClassLoaderStatistics {
28 | startTime = 16:18:05.203
29 | classLoader = jdk.internal.loader.ClassLoaders$AppClassLoader (id = 4)
30 | parentClassLoader = N/A
31 | classLoaderData = 0x7FA3F8306BC0
32 | classCount = 6
33 | chunkSize = 84.0 kB
34 | blockSize = 23.1 kB
35 | unsafeAnonymousClassCount = 4
36 | unsafeAnonymousChunkSize = 12.0 kB
37 | unsafeAnonymousBlockSize = 7.5 kB
38 | }
39 |
40 | ...
41 | ```
42 |
43 | #### CLASS_LOADING_STATISTICS
44 |
45 | - [custom-profile](custom-profile.xml)
46 | - `jdk.ClassLoadingStatistics`
47 | - generated every 1s
48 |
49 | ```
50 | jdk.ClassLoadingStatistics {
51 | startTime = 16:13:52.017
52 | loadedClassCount = 1715
53 | unloadedClassCount = 0
54 | }
55 | ```
56 |
57 | ## LOADING OF SINGLE CLASSES
58 |
59 | - `disabled` by default
60 |
61 | #### CLASS_LOAD
62 |
63 | ```
64 | jdk.ClassLoad {
65 | startTime = 16:27:51.712
66 | duration = 0.847 ms
67 | loadedClass = java.util.concurrent.ForkJoinPool$ManagedBlocker (classLoader = bootstrap)
68 | definingClassLoader = null initiatingClassLoader = null eventThread = "pool-1-thread-3" (javaThreadId = 17)
69 | stackTrace = [
70 | java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(long) line: 1650
71 | java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take() line: 1182
72 | java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take() line: 899
73 | java.util.concurrent.ThreadPoolExecutor.getTask() line: 1056
74 | java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1116
75 | ...
76 | ]
77 | }
78 | ```
79 |
80 | #### CLASS_UNLOAD
81 |
82 | ```
83 | jdk.ClassUnload {
84 | startTime = 16:27:49.573
85 | unloadedClass = java.lang.invoke.LambdaForm$MH.1387135337 (classLoader = bootstrap)
86 | definingClassLoader = N/A
87 | }
88 | ```
89 |
90 | #### CLASS_DEFINE
91 |
92 | ```
93 | jdk.ClassDefine {
94 | startTime = 16:27:50.046
95 | definedClass = jdk.jfr.internal.consumer.AbstractEventStream$1 (classLoader = bootstrap)
96 | definingClassLoader = null eventThread = "jfr-0" (javaThreadId = 14)
97 | stackTrace = [
98 | jdk.jfr.internal.consumer.AbstractEventStream.run(AccessControlContext) line: 262
99 | jdk.jfr.internal.consumer.AbstractEventStream.start(long) line: 222
100 | jdk.jfr.consumer.RecordingStream.start() line: 344
101 | pbouda.jfr.Jfr.lambda$start$2(Configuration, String[]) line: 48
102 | pbouda.jfr.Jfr$$Lambda$21.1342443276.run()
103 | ...
104 | ]
105 | }
106 | ```
--------------------------------------------------------------------------------
/CODE_CACHE.md:
--------------------------------------------------------------------------------
1 | # CODE_CACHE
2 |
3 | - https://openjdk.java.net/jeps/197
4 | - Divide the code cache into distinct segments, each of which contains compiled code of a particular type
5 | - `(-XX:NonMethodCodeHeapSize)` A non-method code heap containing non-method code, such as compiler
6 | buffers and bytecode interpreter. This code type will stay in the code cache forever.
7 | - `(-XX:ProfiledCodeHeapSize)` A profiled code heap containing lightly optimized, profiled methods
8 | with a short lifetime.
9 | - `(-XX:NonProfiledCodeHeapSize)` A non-profiled code heap containing fully optimized, non-profiled
10 | methods with a potentially long lifetime.
11 | - Code cache sweeper: Now only iterates over the method-code heaps
12 |
13 | #### CODE_SWEEPER_CONFIGURATION
14 |
15 | - `#period: beginChunk`
16 |
17 | ```
18 | jdk.CodeSweeperConfiguration {
19 | startTime = 10:40:38.191
20 | sweeperEnabled = true
21 | flushingEnabled = true
22 | }
23 | ```
24 |
25 | #### CODE_SWEEPER_STATISTICS
26 |
27 | - `#period: everyChunk`
28 |
29 | ```
30 | jdk.CodeSweeperStatistics {
31 | startTime = 10:48:25.405
32 | sweepCount = 10
33 | methodReclaimedCount = 1081
34 | totalSweepTime = 112 ms
35 | peakFractionTime = 102 ms
36 | peakSweepTime = 102 ms
37 | }
38 | ```
39 |
40 | #### SWEEP_CODE_CACHE
41 |
42 | - `#threshold: 100 ms`
43 |
44 | ```
45 | jdk.SweepCodeCache {
46 | startTime = 10:50:23.906
47 | duration = 149 ms
48 | sweepId = 2
49 | sweptCount = 1811
50 | flushedCount = 0
51 | zombifiedCount = 1096
52 | eventThread = "Sweeper thread" (javaThreadId = 10)
53 | }
54 | ```
55 |
56 | #### CODE_CACHE_CONFIGURATION
57 |
58 | - `#period: beginChunk`
59 |
60 | ```
61 | jdk.CodeCacheConfiguration {
62 | startTime = 10:54:13.401
63 | initialSize = 2.4 MB
64 | reservedSize = 240.0 MB
65 | nonNMethodSize = 5.6 MB
66 | profiledSize = 117.2 MB
67 | nonProfiledSize = 117.2 MB
68 | expansionSize = 64.0 kB
69 | minBlockLength = 6 bytes
70 | startAddress = 0x7F62A46FE000
71 | reservedTopAddress = 0x7F62B36FE000
72 | }
73 | ```
74 |
75 | #### CODE_CACHE_STATISTICS
76 |
77 | - `#period: everyChunk`
78 | - statistics of all 3 types of storage
79 |
80 | ```
81 | jdk.CodeCacheStatistics {
82 | startTime = 10:54:13.401
83 | codeBlobType = "CodeHeap 'non-profiled nmethods'"
84 | startAddress = 0x7F62AC1C7000
85 | reservedTopAddress = 0x7F62B36FE000
86 | entryCount = 510
87 | methodCount = 510
88 | adaptorCount = 0
89 | unallocatedCapacity = 116.6 MB
90 | fullCount = 0
91 | }
92 |
93 |
94 | jdk.CodeCacheStatistics {
95 | startTime = 10:54:13.401
96 | codeBlobType = "CodeHeap 'profiled nmethods'"
97 | startAddress = 0x7F62A4C90000
98 | reservedTopAddress = 0x7F62AC1C7000
99 | entryCount = 975
100 | methodCount = 975
101 | adaptorCount = 0
102 | unallocatedCapacity = 115.0 MB
103 | fullCount = 0
104 | }
105 |
106 |
107 | jdk.CodeCacheStatistics {
108 | startTime = 10:54:13.401
109 | codeBlobType = "CodeHeap 'non-nmethods'"
110 | startAddress = 0x7F62A46FE000
111 | reservedTopAddress = 0x7F62A4C90000
112 | entryCount = 964
113 | methodCount = 0
114 | adaptorCount = 342
115 | unallocatedCapacity = 4.4 MB
116 | fullCount = 0
117 | }
118 | ```
119 |
120 | #### CODE_CACHE_FULL
121 |
122 | - `jdk.CodeCacheFull#enabled: true`
123 | - not reproduced
124 |
--------------------------------------------------------------------------------
/GC_Z.md:
--------------------------------------------------------------------------------
1 | # ZGC
2 |
3 | - `jdk.ZPageAllocation` could not reproduce
4 |
5 | ```
6 | jdk.ZStatisticsSampler {
7 | startTime = 12:49:56.808
8 | duration = 0.000011 ms
9 | id = "Allocation Stall"
10 | value = 216019
11 | eventThread = "pool-1-thread-4" (javaThreadId = 18)
12 | }
13 | ```
14 |
15 | ```
16 | jdk.ZStatisticsCounter {
17 | startTime = 12:52:28.279
18 | duration = 0.000046 ms
19 | id = "Page Cache Hit L1"
20 | increment = 1
21 | value = 58
22 | eventThread = "pool-1-thread-2" (javaThreadId = 16)
23 | }
24 |
25 |
26 | jdk.ZStatisticsCounter {
27 | startTime = 12:52:28.279
28 | duration = 0.000008 ms
29 | id = "Allocation Rate"
30 | increment = 2097152
31 | value = 113246208
32 | eventThread = "pool-1-thread-2" (javaThreadId = 16)
33 | }
34 |
35 |
36 | jdk.ZStatisticsCounter {
37 | startTime = 12:52:28.279
38 | duration = 0.000009 ms
39 | id = "Undo Page Allocation"
40 | increment = 1
41 | value = 15
42 | eventThread = "pool-1-thread-2" (javaThreadId = 16)
43 | }
44 |
45 | ...
46 | ```
47 |
48 | ```
49 | jdk.ZThreadPhase {
50 | startTime = 12:55:16.122
51 | duration = 0.000799 ms
52 | gcId = 7
53 | name = "Pause Roots Setup"
54 | }
55 |
56 |
57 | jdk.ZThreadPhase {
58 | startTime = 12:55:16.122
59 | duration = 0.000309 ms
60 | gcId = 7
61 | name = "Pause Roots ObjectSynchronizer"
62 | }
63 |
64 |
65 | jdk.ZThreadPhase {
66 | startTime = 12:55:16.122
67 | duration = 0.00219 ms
68 | gcId = 7
69 | name = "Pause Roots Universe"
70 | eventThread = "ZWorker#0" (osThreadId = 29358)
71 | }
72 |
73 |
74 | jdk.ZThreadPhase {
75 | startTime = 12:55:16.122
76 | duration = 0.00103 ms
77 | gcId = 7
78 | name = "Pause Roots Management"
79 | }
80 |
81 |
82 | jdk.ZThreadPhase {
83 | startTime = 12:55:16.122
84 | duration = 0.00126 ms
85 | gcId = 7
86 | name = "Pause Roots JVMTIExport"
87 | }
88 |
89 |
90 | jdk.ZThreadPhase {
91 | startTime = 12:55:16.122
92 | duration = 0.0155 ms
93 | gcId = 7
94 | name = "Pause Roots SystemDictionary"
95 | }
96 |
97 |
98 | jdk.ZThreadPhase {
99 | startTime = 12:55:16.122
100 | duration = 1.34 ms
101 | gcId = 7
102 | name = "Pause Roots Threads"
103 | eventThread = "ZWorker#0" (osThreadId = 29358)
104 | }
105 |
106 |
107 | jdk.ZThreadPhase {
108 | startTime = 12:55:16.124
109 | duration = 0.00178 ms
110 | gcId = 7
111 | name = "Pause Roots JVMTIWeakExport"
112 | eventThread = "ZWorker#0" (osThreadId = 29358)
113 | }
114 |
115 |
116 | jdk.ZThreadPhase {
117 | startTime = 12:55:16.122
118 | duration = 1.37 ms
119 | gcId = 7
120 | name = "Pause Roots"
121 | eventThread = "ZWorker#0" (osThreadId = 29358)
122 | }
123 |
124 |
125 | jdk.ZThreadPhase {
126 | startTime = 12:55:16.122
127 | duration = 1.56 ms
128 | gcId = 7
129 | name = "Pause Roots Threads"
130 | }
131 |
132 |
133 | jdk.ZThreadPhase {
134 | startTime = 12:55:16.122
135 | duration = 1.60 ms
136 | gcId = 7
137 | name = "Pause Roots"
138 | }
139 |
140 |
141 | jdk.ZThreadPhase {
142 | startTime = 12:55:16.124
143 | duration = 0.00109 ms
144 | gcId = 7
145 | name = "Pause Roots Teardown"
146 | }
147 |
148 |
149 | jdk.ZThreadPhase {
150 | startTime = 12:55:16.120
151 | duration = 4.49 ms
152 | gcId = -1
153 | name = "Allocation Stall"
154 | eventThread = "pool-1-thread-4" (javaThreadId = 18)
155 | }
156 |
157 | ...
158 | ```
--------------------------------------------------------------------------------
/MONITOR.md:
--------------------------------------------------------------------------------
1 | ## JAVA_MONITOR_ENTER
2 |
3 | - [custom-profile](custom-profile.xml)
4 | - `jdk.JavaMonitorEnter`
5 | - time spent in a critical path must be longer than 10ms
6 | - the monitor needs to be contended (inflated) otherwise lightweight lock is used
7 | and the event is not thrown
8 |
9 | ```java
10 | public class MonitorEnter {
11 |
12 | public static void main(String[] args) {
13 | Jfr.start("jdk.JavaMonitorEnter");
14 |
15 | ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
16 | executor.scheduleWithFixedDelay(MonitorEnter::innerMethod, 0, 10, TimeUnit.MILLISECONDS);
17 |
18 | while(true) {
19 | innerMethod();
20 | }
21 | }
22 |
23 | private static synchronized void innerMethod() {
24 | System.out.println("Protected Area - " + Thread.currentThread().getName());
25 | try {
26 | Thread.sleep(20);
27 | } catch (InterruptedException e) {}
28 | }
29 | }
30 | ```
31 |
32 | ```
33 | jdk.JavaMonitorEnter {
34 | startTime = 19:11:29.873
35 | duration = 13.3 s
36 | monitorClass = java.lang.Class (classLoader = bootstrap)
37 | previousOwner = "main" (javaThreadId = 1)
38 | address = 0x7F77C8021888
39 | eventThread = "pool-1-thread-2" (javaThreadId = 17)
40 | stackTrace = [
41 | pbouda.jfr.MonitorEnter.innerMethod() line: 22
42 | pbouda.jfr.MonitorEnter$$Lambda$22.1560911714.run()
43 | java.util.concurrent.Executors$RunnableAdapter.call() line: 515
44 | java.util.concurrent.FutureTask.runAndReset() line: 305
45 | java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run() line: 305
46 | ...
47 | ]
48 | }
49 | ```
50 |
51 | ## JAVA_MONITOR_WAIT
52 |
53 | - [custom-profile](custom-profile.xml)
54 | - `jdk.JavaMonitorWait`
55 | - thread needs to wait for acquiring a lock longer than 10 ms
56 |
57 | ```
58 | jdk.JavaMonitorWait {
59 | startTime = 19:14:11.474
60 | duration = 22.7 ms
61 | monitorClass = java.lang.Object (classLoader = bootstrap)
62 | notifier = N/A
63 | timeout = 20.0 ms
64 | timedOut = true
65 | address = 0x7F3B64007408
66 | eventThread = "JFR Periodic Tasks" (javaThreadId = 18)
67 | stackTrace = [
68 | java.lang.Object.wait(long)
69 | jdk.jfr.internal.PlatformRecorder.takeNap(long) line: 481
70 | jdk.jfr.internal.PlatformRecorder.periodicTask() line: 474
71 | jdk.jfr.internal.PlatformRecorder.lambda$startDiskMonitor$1() line: 417
72 | jdk.jfr.internal.PlatformRecorder$$Lambda$63.678689676.run()
73 | ...
74 | ]
75 | }
76 | ```
77 |
78 | ## JAVA_MONITOR_INFLATE
79 |
80 | - `COULD NOT REPRODUCE`
81 |
82 |
83 | ## BIASED_LOCK_REVOCATION
84 |
85 | - [custom-profile](custom-profile.xml)
86 | - `jdk.BiasedLockRevocation`
87 | - one thread needs to get biased lock and another thread tries to get the lock for itself
88 |
89 | ```
90 | jdk.BiasedLockRevocation {
91 | startTime = 20:22:07.422
92 | duration = 0.102 ms
93 | lockClass = jdk.jfr.internal.MetadataRepository (classLoader = bootstrap)
94 | safepointId = 0
95 | previousOwner = "jfr-0" (javaThreadId = 14)
96 | eventThread = "JFR Periodic Tasks" (javaThreadId = 17)
97 | stackTrace = [
98 | jdk.jfr.internal.MetadataRepository.flush() line: 320
99 | jdk.jfr.internal.RequestEngine.run_requests(Collection) line: 265
100 | jdk.jfr.internal.RequestEngine.doPeriodic() line: 186
101 | jdk.jfr.internal.PlatformRecorder.periodicTask() line: 472
102 | jdk.jfr.internal.PlatformRecorder.lambda$startDiskMonitor$1() line: 417
103 | ...
104 | ]
105 | }
106 | ```
--------------------------------------------------------------------------------
/GC_BASICS.md:
--------------------------------------------------------------------------------
1 | # G1_GARBAGE_COLLECTION
2 |
3 | - `jdk.GarbageCollection`
4 | - `jdk.YoungGarbageCollection`
5 | - `jdk.OldGarbageCollection`
6 | - `jdk.GCPhasePause`
7 |
8 | #### ALLOCATION REQUIRING GC
9 |
10 | ```
11 | jdk.AllocationRequiringGC {
12 | startTime = 12:22:13.564
13 | gcId = 191
14 | size = 2.0 kB
15 | eventThread = "pool-1-thread-4" (javaThreadId = 18)
16 | stackTrace = [
17 | jdk.internal.misc.Unsafe.allocateUninitializedArray(Class, int) line: 1387
18 | java.lang.StringConcatHelper.newArray(long) line: 458
19 | java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(Object, long)
20 | java.lang.invoke.LambdaForm$MH.2109640190.invoke(Object, int, Object)
21 | java.lang.invoke.Invokers$Holder.linkToTargetMethod(int, Object, Object)
22 | ...
23 | ]
24 | }
25 | ```
26 |
27 | #### TENURING DISTRIBUTION
28 |
29 | ```
30 | jdk.TenuringDistribution {
31 | startTime = 12:24:20.360
32 | gcId = 132
33 | age = 3
34 | size = 0 bytes
35 | }
36 | ```
37 |
38 | #### YOUNG GARBAGE COLLECTION
39 |
40 | ```
41 | jdk.GCPhasePause {
42 | startTime = 23:51:39.260
43 | duration = 48.4 ms
44 | gcId = 43
45 | name = "GC Pause"
46 | }
47 |
48 |
49 | jdk.GarbageCollection {
50 | startTime = 23:51:39.260
51 | duration = 48.4 ms
52 | gcId = 43
53 | name = "G1New"
54 | cause = "G1 Evacuation Pause"
55 | sumOfPauses = 48.4 ms
56 | longestPause = 48.4 ms
57 | }
58 |
59 |
60 | jdk.YoungGarbageCollection {
61 | startTime = 23:51:39.260
62 | duration = 48.4 ms
63 | gcId = 43
64 | tenuringThreshold = 15
65 | }
66 |
67 |
68 | jdk.G1GarbageCollection {
69 | startTime = 23:51:39.260
70 | duration = 48.4 ms
71 | gcId = 43
72 | type = "Normal"
73 | }
74 | ```
75 |
76 | #### OLD GARBAGE COLLECTION
77 |
78 | ```
79 | jdk.GarbageCollection {
80 | startTime = 00:04:46.908
81 | duration = 431 ms
82 | gcId = 180
83 | name = "G1Old"
84 | cause = "G1 Evacuation Pause"
85 | sumOfPauses = 0 s
86 | longestPause = 0 s
87 | }
88 |
89 |
90 | jdk.OldGarbageCollection {
91 | startTime = 00:04:46.908
92 | duration = 431 ms
93 | gcId = 180
94 | }
95 | ```
96 |
97 | #### FULL GARBAGE COLLECTION
98 |
99 | ```
100 | jdk.GCPhasePause {
101 | startTime = 23:56:17.629
102 | duration = 218 ms
103 | gcId = 382
104 | name = "GC Pause"
105 | }
106 |
107 |
108 | jdk.GarbageCollection {
109 | startTime = 23:56:17.629
110 | duration = 218 ms
111 | gcId = 382
112 | name = "G1Full"
113 | cause = "G1 Evacuation Pause"
114 | sumOfPauses = 218 ms
115 | longestPause = 218 ms
116 | }
117 | ```
118 |
119 | #### GC PHASE PARALLEL
120 |
121 | ```
122 | jdk.GCPhaseParallel {
123 | startTime = 12:35:59.262
124 | duration = 1.82 ms
125 | gcId = 172
126 | gcWorkerId = 5
127 | name = "ObjCopy"
128 | eventThread = "GC Thread#0" (osThreadId = 26694)
129 | }
130 |
131 |
132 | jdk.GCPhaseParallel {
133 | startTime = 12:35:59.260
134 | duration = 5.31 ms
135 | gcId = 172
136 | gcWorkerId = 6
137 | name = "ScanHR"
138 | }
139 |
140 | jdk.GCPhaseParallel {
141 | startTime = 12:35:59.264
142 | duration = 1.32 ms
143 | gcId = 172
144 | gcWorkerId = 5
145 | name = "Termination"
146 | eventThread = "GC Thread#0" (osThreadId = 26694)
147 | }
148 |
149 | jdk.GCPhaseParallel {
150 | startTime = 12:35:59.265
151 | duration = 0.000330 ms
152 | gcId = 172
153 | gcWorkerId = 2
154 | name = "RedirtyCards"
155 | }
156 |
157 | jdk.GCPhaseParallel {
158 | startTime = 12:35:59.265
159 | duration = 0.00296 ms
160 | gcId = 172
161 | gcWorkerId = 1
162 | name = "NonYoungFreeCSet"
163 | }
164 |
165 | jdk.GCPhaseParallel {
166 | startTime = 12:35:59.265
167 | duration = 0.00189 ms
168 | gcId = 172
169 | gcWorkerId = 3
170 | name = "YoungFreeCSet"
171 | }
172 | ```
--------------------------------------------------------------------------------
/METASPACE.md:
--------------------------------------------------------------------------------
1 | # METASPACE
2 |
3 | #### Metaspace Information
4 |
5 | ```
6 | Metaspace itself is not garbage-collected. But the java heap is. When java.lang.Class
7 | objects get collected the underlying metadata gets freed too. So in most circumstances
8 | regular GC cycles will also free up metaspace if there are any classes that are eligible
9 | for unloading.
10 | ```
11 |
12 | ```
13 | As predicting the need for metadata was a complex and inconvenient exercise,
14 | the Permanent Generation was removed in Java 8 in favor of the Metaspace.
15 | From this point on, most of the miscellaneous things were moved to regular
16 | Java heap.
17 |
18 | The class definitions, however, are now loaded into something called Metaspace.
19 | It is located in the native memory and does not interfere with the regular heap
20 | objects. By default, Metaspace size is only limited by the amount of native
21 | memory available to the Java process. This saves developers from a situation
22 | when adding just one more class to the application results in the
23 | java.lang.OutOfMemoryError: Permgen space. Notice that having such seemingly
24 | unlimited space does not ship without costs – letting the Metaspace to grow
25 | uncontrollably you can introduce heavy swapping and/or reach native allocation
26 | failures instead.
27 |
28 | In case you still wish to protect yourself for such occasions you can limit the
29 | growth of Metaspace similar to following, limiting Metaspace size to 256 MB:
30 |
31 | java -XX:MaxMetaspaceSize=256m com.mycompany.MyApplication
32 | ```
33 |
34 | #### Metaspace Options
35 |
36 | ```
37 | jdk.MetaspaceSummary#enabled: true
38 | jdk.MetaspaceGCThreshold#enabled: true
39 | jdk.MetaspaceAllocationFailure#enabled: true
40 | jdk.MetaspaceAllocationFailure#stackTrace: true
41 | jdk.MetaspaceOOM#enabled: true
42 | jdk.MetaspaceOOM#stackTrace: true
43 | jdk.MetaspaceChunkFreeListSummary#enabled: true
44 | ```
45 |
46 | #### METASPACE_SUMMARY
47 |
48 | - after every GC
49 |
50 | ```
51 | jdk.MetaspaceSummary {
52 | startTime = 11:59:06.231
53 | gcId = 17
54 | when = "Before GC"
55 | gcThreshold = 20.8 MB
56 | metaspace = {
57 | committed = 5.1 MB
58 | used = 4.4 MB
59 | reserved = 1.0 GB
60 | }
61 | dataSpace = {
62 | committed = 4.5 MB
63 | used = 4.0 MB
64 | reserved = 8.0 MB
65 | }
66 | classSpace = {
67 | committed = 640.0 kB
68 | used = 477.5 kB
69 | reserved = 1.0 GB
70 | }
71 | }
72 |
73 |
74 | jdk.MetaspaceSummary {
75 | startTime = 11:59:06.368
76 | gcId = 17
77 | when = "After GC"
78 | gcThreshold = 20.8 MB
79 | metaspace = {
80 | committed = 5.1 MB
81 | used = 4.4 MB
82 | reserved = 1.0 GB
83 | }
84 | dataSpace = {
85 | committed = 4.5 MB
86 | used = 4.0 MB
87 | reserved = 8.0 MB
88 | }
89 | classSpace = {
90 | committed = 640.0 kB
91 | used = 477.5 kB
92 | reserved = 1.0 GB
93 | }
94 | }
95 | ```
96 |
97 | #### METASPACE_CHUNK_FREE_LIST_SUMMARY
98 |
99 | ```
100 | jdk.MetaspaceChunkFreeListSummary {
101 | startTime = 12:07:17.168
102 | gcId = 15
103 | when = "Before GC"
104 | metadataType = "Metadata"
105 | specializedChunks = 0
106 | specializedChunksTotalSize = 0 bytes
107 | smallChunks = 0
108 | smallChunksTotalSize = 0 bytes
109 | mediumChunks = 0
110 | mediumChunksTotalSize = 0 bytes
111 | humongousChunks = 0
112 | humongousChunksTotalSize = 0 bytes
113 | }
114 |
115 | jdk.MetaspaceChunkFreeListSummary {
116 | startTime = 12:07:17.273
117 | gcId = 15
118 | when = "After GC"
119 | metadataType = "Metadata"
120 | specializedChunks = 0
121 | specializedChunksTotalSize = 0 bytes
122 | smallChunks = 0
123 | smallChunksTotalSize = 0 bytes
124 | mediumChunks = 0
125 | mediumChunksTotalSize = 0 bytes
126 | humongousChunks = 0
127 | humongousChunksTotalSize = 0 bytes
128 | }
129 | ```
--------------------------------------------------------------------------------
/COMPILER.md:
--------------------------------------------------------------------------------
1 | # COMPILER
2 |
3 | - Compiler Configuration
4 | - `jdk.CompilerConfiguration`
5 | - `#period: beginChunk`
6 |
7 | ```
8 | jdk.CompilerConfiguration {
9 | startTime = 10:14:15.397
10 | threadCount = 4
11 | tieredCompilation = true
12 | }
13 | ```
14 |
15 | #### COMPILER_STATISTICS
16 |
17 | - every 1 seconds (by default)
18 | - `jdk.CompilerStatistics`
19 | - cumulative information
20 |
21 | ```
22 | jdk.CompilerStatistics {
23 | startTime = 10:22:58.986
24 | compileCount = 1737
25 | bailoutCount = 9
26 | invalidatedCount = 0
27 | osrCompileCount = 11
28 | standardCompileCount = 1726
29 | osrBytesCompiled = 0 bytes
30 | standardBytesCompiled = 0 bytes
31 | nmethodsSize = 2.9 MB
32 | nmethodCodeSize = 2.0 MB
33 | peakTimeSpent = 759 ms
34 | totalTimeSpent = 8.22 s
35 | }
36 | ```
37 |
38 | #### COMPILATION
39 |
40 | ```
41 | jdk.Compilation {
42 | startTime = 10:31:08.598
43 | duration = 169 ms
44 | compileId = 1834
45 | compiler = "c1"
46 | method = pbouda.jfr.AllocationStress$Utility.getSample(float, AllocationStress$Contact[])
47 | compileLevel = 3
48 | succeded = true
49 | isOsr = false
50 | codeSize = 968 bytes
51 | inlinedBytes = 10 bytes
52 | eventThread = "C1 CompilerThread0" (javaThreadId = 9)
53 | }
54 | ```
55 |
56 | #### COMPILER_INLINING
57 |
58 | - `message = "force inline by annotation"`
59 | - `message = "already compiled into a big method"`
60 | - `message = "callee is too large"`
61 |
62 | ```
63 | jdk.CompilerInlining {
64 | startTime = 10:18:41.347
65 | compileId = 1394
66 | caller = java.lang.String.equalsIgnoreCase(String)
67 | callee = {
68 | type = "java/lang/String"
69 | name = "length"
70 | descriptor = "()I"
71 | }
72 | succeeded = true
73 | message = "inline"
74 | bci = 14
75 | eventThread = "C1 CompilerThread0" (javaThreadId = 9)
76 | }
77 | ```
78 |
79 | #### COMPILATION_FAILURE
80 |
81 | ```
82 | jdk.CompilationFailure {
83 | startTime = 10:33:04.033
84 | failureMessage = "Jvmti state change invalidated dependencies"
85 | compileId = 1478
86 | eventThread = "C2 CompilerThread1" (javaThreadId = 7)
87 | }
88 | ```
89 |
90 | #### COMPILER_PHASE
91 |
92 | ```
93 | jdk.CompilerPhase {
94 | startTime = 10:36:32.845
95 | duration = 0.261 ms
96 | phase = "PhaseIdealLoop 2"
97 | compileId = 1369
98 | phaseLevel = 2
99 | eventThread = "C2 CompilerThread2" (javaThreadId = 8)
100 | }
101 |
102 |
103 | jdk.CompilerPhase {
104 | startTime = 10:36:32.846
105 | duration = 0.0225 ms
106 | phase = "Before beautify loops"
107 | compileId = 1369
108 | phaseLevel = 3
109 | eventThread = "C2 CompilerThread2" (javaThreadId = 8)
110 | }
111 |
112 |
113 | jdk.CompilerPhase {
114 | startTime = 10:36:32.846
115 | duration = 0.185 ms
116 | phase = "PhaseIdealLoop 3"
117 | compileId = 1369
118 | phaseLevel = 2
119 | eventThread = "C2 CompilerThread2" (javaThreadId = 8)
120 | }
121 |
122 |
123 | jdk.CompilerPhase {
124 | startTime = 10:36:32.843
125 | duration = 2.90 ms
126 | phase = "Final Code"
127 | compileId = 1316
128 | phaseLevel = 1
129 | eventThread = "C2 CompilerThread1" (javaThreadId = 7)
130 | }
131 |
132 | ...
133 | ```
134 |
135 | #### DEOPTIMIZATION
136 |
137 | ```
138 | jdk.Deoptimization {
139 | startTime = 12:33:57.271
140 | compileId = 1655
141 | compiler = "c2"
142 | method = jdk.jfr.internal.EventWriter.putStackTrace()
143 | lineNumber = 170
144 | bci = 7
145 | instruction = "ifeq"
146 | reason = "unstable_if"
147 | action = "reinterpret"
148 | eventThread = "JFR Periodic Tasks" (javaThreadId = 22)
149 | stackTrace = [
150 | jdk.jfr.internal.EventWriter.putStackTrace() line: 170
151 | jdk.jfr.internal.handlers.EventHandler1872_1577964835419-26342.write(long, long, long)
152 | jdk.jfr.events.ExceptionStatisticsEvent.commit()
153 | jdk.jfr.internal.instrument.JDKEvents.emitExceptionStatistics() line: 136
154 | jdk.jfr.internal.instrument.JDKEvents$$Lambda$37.1361501771.run()
155 | ...
156 | ]
157 | }
158 | ```
--------------------------------------------------------------------------------
/src/main/java/pbouda/jfr/AllocationStress.java:
--------------------------------------------------------------------------------
1 | package pbouda.jfr;
2 |
3 | import java.util.Arrays;
4 | import java.util.concurrent.Executors;
5 | import java.util.concurrent.ScheduledExecutorService;
6 | import java.util.concurrent.ThreadLocalRandom;
7 | import java.util.concurrent.TimeUnit;
8 | import java.util.concurrent.atomic.AtomicInteger;
9 |
10 | public class AllocationStress {
11 |
12 | private static final int MIN_GARBAGE = 50_000;
13 | private static final int MAX_GARBAGE = 100_000;
14 | private static final int MIN_LIFESET = 40_000;
15 | private static final int MAX_LIFESET = 60_000;
16 |
17 | private static final int PARALLEL_USERS = 4;
18 |
19 | public static void main(String[] args) {
20 | Jfr.start(
21 | "jdk.ZPageAllocation"
22 | // "jdk.ZThreadPhase"
23 | );
24 |
25 | AtomicInteger counter = new AtomicInteger();
26 |
27 | Runnable runnable = () -> {
28 | Contact[] biggerLifeSet = new Contact[]{};
29 | Contact[] longerLifeSet = new Contact[]{};
30 |
31 | for (int i = 0; i < 20; i++) {
32 | int index = counter.incrementAndGet();
33 | // System.out.println("INDEX: " + index);
34 |
35 | Contact[] contacts1 = Utility.generate("contact-1 " + index,
36 | MIN_GARBAGE, MAX_GARBAGE, MIN_LIFESET, MAX_LIFESET);
37 | Contact[] contacts2 = Utility.generate("contact-2 " + index,
38 | MIN_GARBAGE, MAX_GARBAGE, MIN_LIFESET, MAX_LIFESET);
39 |
40 | biggerLifeSet = Utility.biggerLifeSet(index, biggerLifeSet, contacts1);
41 | longerLifeSet = Utility.longerLifeSet(index, longerLifeSet, contacts2);
42 |
43 | // System.out.println("Size ALL: " + (biggerLifeSet.length + longerLifeSet.length + contacts1.length));
44 | }
45 |
46 | if (counter.get() > 20_000) {
47 | System.exit(0);
48 | }
49 | };
50 |
51 | ScheduledExecutorService executor = Executors.newScheduledThreadPool(PARALLEL_USERS);
52 |
53 | // More parallel users
54 | for (int i = 0; i < PARALLEL_USERS; i++) {
55 | executor.scheduleWithFixedDelay(runnable, 0, 50, TimeUnit.MILLISECONDS);
56 | }
57 | }
58 |
59 | private static class Contact {
60 |
61 | private final String firstname;
62 | private final String lastname;
63 |
64 | Contact(String firstname, String lastname) {
65 | this.firstname = firstname;
66 | this.lastname = lastname;
67 | }
68 | }
69 |
70 | private static class Utility {
71 |
72 | static Contact[] longerLifeSet(int index, Contact[] current, Contact[] contacts1) {
73 | if (index % 10 == 0) {
74 | return contacts1;
75 | } else {
76 | return getSample(.8f, current);
77 | }
78 | }
79 |
80 | static Contact[] biggerLifeSet(int index, Contact[] current, Contact[] contacts) {
81 | Contact[] preserved = getSample(.5f, current);
82 | Contact[] newSample = getSample(.5f, contacts);
83 | Contact[] newLifeSet = combine(newSample, preserved);
84 |
85 | return index % 2 == 0 ? getSample(.5f, newLifeSet) : newLifeSet;
86 | }
87 |
88 | private static Contact[] getSample(float percentage, Contact[] contacts) {
89 | return Arrays.copyOf(contacts, Math.round(contacts.length * percentage));
90 | }
91 |
92 | private static Contact[] combine(Contact[] a, Contact[] b) {
93 | int length = a.length + b.length;
94 | Contact[] result = new Contact[length];
95 | System.arraycopy(a, 0, result, 0, a.length);
96 | System.arraycopy(b, 0, result, a.length, b.length);
97 | return result;
98 | }
99 |
100 | static Contact[] generate(String label, int minGarbage, int maxGarbage, int minLifeSet, int maxLifeSet) {
101 | ThreadLocalRandom random = ThreadLocalRandom.current();
102 | int lifesetIteration = random.nextInt(minGarbage, maxGarbage);
103 |
104 | int overallSize = 0;
105 | for (int i = 0; i < random.nextInt(minLifeSet, maxLifeSet); i++) {
106 | String garbage = "Garbage: " + i + " Index: " + label;
107 | overallSize += garbage.length();
108 | }
109 | // System.out.println(label + ": Size: " + overallSize);
110 |
111 | Contact[] contacts = new Contact[lifesetIteration];
112 | for (int i = 0; i < lifesetIteration; i++) {
113 | contacts[i] = new Contact("FirstName " + i + " | " + label, "LastName " + i + " | " + label);
114 | }
115 | return contacts;
116 | }
117 | }
118 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Streaming JFR (Java Flight Recorder)
2 |
3 | Settings shipped with JDK:
4 | - [default](default-jre.txt)
5 | - Low overhead configuration safe for continuous use in production environments, typically less than 1 % overhead.
6 | - [profile](profile-jre.txt)
7 | - Low overhead configuration for profiling, typically around 2 % overhead.
8 |
9 | #### CPU
10 |
11 | - `jdk.CPULoad`
12 | - execution: `#period: beginChunk`
13 |
14 | ```
15 | jdk.CPULoad {
16 | startTime = 00:05:56.420
17 | jvmUser = 10.64%
18 | jvmSystem = 0.49%
19 | machineTotal = 20.78%
20 | }
21 | ```
22 |
23 | #### SYSTEM_INFORMATION
24 |
25 | - `jdk.OSInformation`
26 | - execution: `#period: beginChunk`
27 |
28 | ```
29 | jdk.OSInformation {
30 | startTime = 23:50:58.983
31 | osVersion = "DISTRIB_ID=LinuxMint
32 | DISTRIB_RELEASE=19.3
33 | DISTRIB_CODENAME=tricia
34 | DISTRIB_DESCRIPTION="Linux Mint 19.3 Tricia"
35 | uname:Linux 5.0.0-37-generic #40~18.04.1-Ubuntu SMP Thu Nov 14 12:06:39 UTC 2019 x86_64
36 | libc:glibc 2.27 NPTL 2.27
37 | "
38 | }
39 | ```
40 |
41 | #### VIRTUALIZATION_INFORMATION
42 |
43 | - `jdk.VirtualizationInformation`
44 | - execution: `#period: beginChunk`
45 |
46 | ```
47 | jdk.VirtualizationInformation {
48 | startTime = 23:54:29.158
49 | name = "No virtualization detected"
50 | }
51 | ```
52 |
53 | #### CPU_INFORMATION
54 |
55 | - `jdk.CPUInformation`
56 | - execution: `#period: beginChunk`
57 |
58 | ```
59 | jdk.CPUInformation {
60 | startTime = 23:52:20.278
61 | cpu = "Intel (null) (HT) SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 Core Intel64"
62 | description = "Brand: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz, Vendor: GenuineIntel
63 | Family: (0x6), Model: (0x8e), Stepping: 0xa
64 | Ext. family: 0x0, Ext. model: 0x8, Type: 0x0, Signature: 0x000806ea
65 | Features: ebx: 0x04100800, ecx: 0x7ffafbbf, edx: 0xbfebfbff
66 | Ext. features: eax: 0x00000000, ebx: 0x00000000, ecx: 0x00000121, edx: 0x2c100800
67 | Supports: On-Chip FPU, Virtual Mode Extensions, Debugging Extensions, Page Size Extensions, Time Stamp Counter, Model Specific Registers, Physical Address Extension, Machine Check Exceptions, CMPXCHG8B Instruction, On-Chip APIC, Fast System Call, Memory Type Range Registers, Page Global Enable, Machine Check Architecture, Conditional Mov Instruction, Page Attribute Table, 36-bit Page Size Extension, CLFLUSH Instruction, Debug Trace Store feature, ACPI registers in MSR space, Intel Architecture MMX Technology, Fast Float Point Save and Restore, Streaming SIMD extensions, Streaming SIMD extensions 2, Self-Snoop, Hyper Threading, Thermal Monitor, Streaming SIMD Extensions 3, PCLMULQDQ, 64-bit DS Area, MONITOR/MWAIT instructions, CPL Qualified Debug Store, Virtual Machine Extensions, Enhanced Intel SpeedStep technology, Thermal Monitor 2, Supplemental Streaming SIMD Extensions 3, Fused Multiply-Add, CMPXCHG16B, xTPR Update Control, Perfmon and Debug Capability, Process-context identifiers, Streaming SIMD extensions 4.1, Streaming SIMD extensions 4.2, x2APIC, MOVBE, Popcount instruction, TSC-Deadline, AESNI, XSAVE, OSXSAVE, AVX, F16C, LAHF/SAHF instruction support, Advanced Bit Manipulations: LZCNT, SYSCALL/SYSRET, Execute Disable Bit, RDTSCP, Intel 64 Architecture, Invariant TSC"
68 | sockets = 1
69 | cores = 4
70 | hwThreads = 8
71 | }
72 | ```
73 |
74 | #### CPU_TIMESTAMP_COUNTER
75 |
76 | - `jdk.CPUTimeStampCounter`
77 | - execution: `#period: beginChunk`
78 |
79 | ```
80 | jdk.CPUTimeStampCounter {
81 | startTime = 00:00:41.481
82 | fastTimeEnabled = true
83 | fastTimeAutoEnabled = true
84 | osFrequency = 1000000000 Hz
85 | fastTimeFrequency = 1600000000 Hz
86 | }
87 | ```
88 |
89 | #### JVM_INFORMATION
90 |
91 | - `jdk.JVMInformation`
92 | - execution: `#period: beginChunk`
93 |
94 | ```
95 | jdk.JVMInformation {
96 | startTime = 22:41:27.680
97 | jvmName = "OpenJDK 64-Bit Server VM"
98 | jvmVersion = "OpenJDK 64-Bit Server VM (14-ea+28-1366) for linux-amd64 JRE (14-ea+28-1366), built on Dec 18 2019 20:09:37 by "mach5one" with gcc 8.3.0"
99 | jvmArguments = "-Dvisualvm.id=257396015513599 -javaagent:/home/pbouda/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/193.5662.31/lib/idea_rt.jar=39229:/home/pbouda/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/193.5662.31/bin -Dfile.encoding=UTF-8"
100 | jvmFlags = N/A
101 | javaArguments = "pbouda.jfr.Jfr"
102 | jvmStartTime = 22:41:26.876
103 | pid = 20919
104 | }
105 | ```
106 |
107 | #### INITIAL_SYSTEM_PROPERTY
108 |
109 | - `jdk.InitialSystemProperty`
110 | - execution: `#period: beginChunk`
111 |
112 | ```
113 | jdk.InitialSystemProperty {
114 | startTime = 22:42:50.913
115 | key = "java.vm.specification.name"
116 | value = "Java Virtual Machine Specification"
117 | }
118 |
119 |
120 | jdk.InitialSystemProperty {
121 | startTime = 22:42:50.913
122 | key = "java.vm.version"
123 | value = "14-ea+28-1366"
124 | }
125 |
126 |
127 | jdk.InitialSystemProperty {
128 | startTime = 22:42:50.913
129 | key = "java.vm.name"
130 | value = "OpenJDK 64-Bit Server VM"
131 | }
132 |
133 | ...
134 | ```
135 |
136 | #### INITIAL_ENVIRONMENT_PROPERTY
137 |
138 | - `jdk.InitialEnvironmentVariable`
139 | - execution: `#period: beginChunk`
140 |
141 | ```
142 | jdk.InitialEnvironmentVariable {
143 | startTime = 23:56:45.069
144 | key = "LANGUAGE"
145 | value = "en_US"
146 | }
147 |
148 |
149 | jdk.InitialEnvironmentVariable {
150 | startTime = 23:56:45.069
151 | key = "GJS_DEBUG_TOPICS"
152 | value = "JS ERROR;JS LOG"
153 | }
154 |
155 | ...
156 | ```
157 |
158 | #### EXECUTE_VM_OPERATION
159 |
160 | - `jdk.ExecuteVMOperation`
161 | - execution: `#threshold: 0ms`
162 | - catch all VM operations
163 |
164 | ```
165 | jdk.ExecuteVMOperation {
166 | startTime = 23:13:43.190
167 | duration = 2.97 ms
168 | operation = "G1TryInitiateConcMark"
169 | safepoint = true
170 | blocking = true
171 | caller = "allocator-0" (javaThreadId = 15)
172 | safepointId = 14
173 | }
174 | ```
175 |
176 |
177 | #### EXECUTION_SAMPLE
178 |
179 | - `jdk.ExecutionSample`
180 | - execution: `#period: 10 ms` (every 10 ms)
181 |
182 | ```
183 | jdk.ExecutionSample {
184 | startTime = 22:59:28.082
185 | sampledThread = "main" (javaThreadId = 1)
186 | state = "STATE_RUNNABLE"
187 | stackTrace = [
188 | java.io.FileOutputStream.write(byte[], int, int) line: 0
189 | java.io.BufferedOutputStream.flushBuffer() line: 0
190 | java.io.BufferedOutputStream.flush() line: 0
191 | java.io.PrintStream.write(byte[], int, int) line: 0
192 | sun.nio.cs.StreamEncoder.writeBytes() line: 0
193 | ...
194 | ]
195 | }
196 | ```
--------------------------------------------------------------------------------
/THREADS.md:
--------------------------------------------------------------------------------
1 | ## JAVA_THREAD_STATISTICS
2 |
3 | - [custom-profile](custom-profile.xml)
4 | - `jdk.JavaThreadStatistics`
5 | - generated every 1s
6 |
7 | ```
8 | jdk.JavaThreadStatistics {
9 | startTime = 16:24:05.108
10 | activeCount = 12
11 | daemonCount = 10
12 | accumulatedCount = 14
13 | peakCount = 12
14 | }
15 | ```
16 |
17 | ## THREAD_CPU_LOAD
18 |
19 | ```
20 | jdk.ThreadCPULoad {
21 | startTime = 00:03:40.027
22 | user = 8.64%
23 | system = 0.15%
24 | eventThread = "C2 CompilerThread1" (javaThreadId = 7)
25 | }
26 |
27 |
28 | jdk.ThreadCPULoad {
29 | startTime = 00:03:48.574
30 | user = 0.16%
31 | system = 0.05%
32 | eventThread = "main" (javaThreadId = 1)
33 | }
34 |
35 | ...
36 | ```
37 |
38 | ## THREAD_ALLOCATION_STATISTICS
39 |
40 | - [custom-profile](custom-profile.xml)
41 | - `jdk.ThreadAllocationStatistics`
42 | - generated every 1s (by default `everyChunk`)
43 | - all Java and JVM Threads (all threads from ThreadDump)
44 |
45 | ```
46 | jdk.ThreadAllocationStatistics {
47 | startTime = 16:07:58.795
48 | allocated = 858.1 MB
49 | thread = "allocator-0" (javaThreadId = 15)
50 | }
51 |
52 | jdk.ThreadAllocationStatistics {
53 | startTime = 16:07:58.795
54 | allocated = 40 bytes
55 | thread = "C2 CompilerThread0" (javaThreadId = 6)
56 | }
57 |
58 |
59 | jdk.ThreadAllocationStatistics {
60 | startTime = 16:07:58.795
61 | allocated = 4.7 kB
62 | thread = "C1 CompilerThread0" (javaThreadId = 9)
63 | }
64 |
65 | ...
66 | ```
67 |
68 | ## THREAD_START_END
69 |
70 | - [custom-profile](custom-profile.xml)
71 | - `jdk.ThreadStart`
72 | - `jdk.ThreadEnd`
73 | - generated every occasion
74 |
75 | ```
76 | // JVM Compiler Threads
77 |
78 | jdk.ThreadEnd {
79 | startTime = 22:07:40.977
80 | thread = "C2 CompilerThread2" (javaThreadId = 8)
81 | eventThread = "C2 CompilerThread2" (javaThreadId = 8)
82 | }
83 |
84 |
85 | jdk.ThreadEnd {
86 | startTime = 22:07:40.977
87 | thread = "C2 CompilerThread1" (javaThreadId = 7)
88 | eventThread = "C2 CompilerThread1" (javaThreadId = 7)
89 | }
90 |
91 | // User Java threads
92 |
93 | jdk.ThreadStart {
94 | startTime = 22:07:41.552
95 | thread = "wasted-3" (javaThreadId = 25)
96 | eventThread = "wasted-3" (javaThreadId = 25)
97 | }
98 |
99 |
100 | jdk.ThreadEnd {
101 | startTime = 22:07:41.553
102 | thread = "wasted-3" (javaThreadId = 25)
103 | eventThread = "wasted-3" (javaThreadId = 25)
104 | }
105 | ```
106 |
107 | ## THREAD_SLEEP
108 |
109 | - [custom-profile](custom-profile.xml)
110 | - `jdk.ThreadSleep`
111 | - generated every occasion
112 |
113 | ```
114 | jdk.ThreadSleep {
115 | startTime = 22:36:28.750
116 | duration = 1.13 s
117 | time = 1.00 s
118 | eventThread = "main" (javaThreadId = 1)
119 | stackTrace = [
120 | java.lang.Thread.sleep(long)
121 | pbouda.jfr.ThreadSleep.main(String[]) line: 9
122 | ]
123 | }
124 | ```
125 |
126 | ## THREAD_PARK (LockSupport#parkNanos)
127 |
128 | - [custom-profile](custom-profile.xml)
129 | - `jdk.ThreadPark`
130 | - generated when parking is higher than 10 ms
131 | - calling `parkNanos` only
132 |
133 | ```java
134 | new Thread(() -> {
135 | while (true)
136 | LockSupport.parkNanos(Duration.ofMillis(100).toNanos());
137 | }).start();
138 | ```
139 |
140 | ```
141 | jdk.ThreadPark {
142 | startTime = 23:25:12.305
143 | duration = 113 ms
144 | parkedClass = N/A
145 | timeout = 100 ms
146 | until = N/A
147 | address = 0x00000000
148 | eventThread = "Thread-0" (javaThreadId = 15)
149 | stackTrace = [
150 | jdk.internal.misc.Unsafe.park(boolean, long)
151 | java.util.concurrent.locks.LockSupport.parkNanos(long) line: 376
152 | pbouda.jfr.MonitorEnter.lambda$main$0() line: 14
153 | pbouda.jfr.MonitorEnter$$Lambda$22.396180261.run()
154 | java.lang.Thread.run() line: 832
155 | ...
156 | ]
157 | }
158 | ```
159 |
160 | ## THREAD_PARK (LockSupport#park(blocker))
161 |
162 | - [custom-profile](custom-profile.xml)
163 | - `jdk.ThreadPark`
164 | - generated when parking is higher than 10 ms
165 | - generated events with and without `Blocker`
166 | - calling `park` and `unpark` methods
167 |
168 | ```java
169 | Thread clock = new Thread(() -> {
170 | while (true)
171 | LockSupport.park(new Object());
172 | });
173 | clock.start();
174 |
175 | while (true) {
176 | Thread.currentThread().join(100);
177 | LockSupport.unpark(clock);
178 | }
179 | ```
180 |
181 | ```
182 | // Parking without any Blocker object
183 |
184 | jdk.ThreadPark {
185 | startTime = 23:08:51.534
186 | duration = 2.25 s
187 | parkedClass = N/A
188 | timeout = N/A
189 | until = N/A
190 | address = 0x00000000
191 | eventThread = "Thread-0" (javaThreadId = 15)
192 | stackTrace = [
193 | jdk.internal.misc.Unsafe.park(boolean, long)
194 | java.util.concurrent.locks.LockSupport.park() line: 341
195 | pbouda.jfr.MonitorEnter.lambda$main$0() line: 13
196 | pbouda.jfr.MonitorEnter$$Lambda$22.625576447.run()
197 | java.lang.Thread.run() line: 832
198 | ...
199 | ]
200 | }
201 |
202 | // Parking with Blocker Object
203 |
204 | jdk.ThreadPark {
205 | startTime = 23:11:44.143
206 | duration = 2.25 s
207 | parkedClass = java.lang.Object (classLoader = bootstrap)
208 | timeout = N/A
209 | until = N/A
210 | address = 0x6DC0001F0
211 | eventThread = "Thread-0" (javaThreadId = 15)
212 | stackTrace = [
213 | jdk.internal.misc.Unsafe.park(boolean, long)
214 | java.util.concurrent.locks.LockSupport.park(Object) line: 211
215 | pbouda.jfr.MonitorEnter.lambda$main$0(Object) line: 15
216 | pbouda.jfr.MonitorEnter$$Lambda$22.1128032093.run()
217 | java.lang.Thread.run() line: 832
218 | ...
219 | ]
220 | }
221 | ```
222 |
223 | ## THREAD_PARK (LockSupport#parkUntil(blocker, deadline))
224 |
225 | - [custom-profile](custom-profile.xml)
226 | - `jdk.ThreadPark`
227 | - generated when parking is higher than 10 ms
228 | - generated event with `Blocker` and `Deadline`
229 | - calling `parkUntil` only
230 |
231 | ```java
232 | new Thread(() -> {
233 | while (true)
234 | LockSupport.parkUntil(new Object(), Instant.now().plusMillis(100).toEpochMilli());
235 | }).start();
236 | ```
237 |
238 | ```
239 | jdk.ThreadPark {
240 | startTime = 23:15:37.775
241 | duration = 112 ms
242 | parkedClass = java.lang.Object (classLoader = bootstrap)
243 | timeout = N/A
244 | until = 23:15:37.236
245 | address = 0x6DC005E80
246 | eventThread = "Thread-0" (javaThreadId = 15)
247 | stackTrace = [
248 | jdk.internal.misc.Unsafe.park(boolean, long)
249 | java.util.concurrent.locks.LockSupport.parkUntil(Object, long) line: 293
250 | pbouda.jfr.MonitorEnter.lambda$main$0(Object) line: 16
251 | pbouda.jfr.MonitorEnter$$Lambda$22.443308702.run()
252 | java.lang.Thread.run() line: 832
253 | ...
254 | ]
255 | }
256 | ```
257 |
258 | ## THREAD_CONTEXT_SWITCH_RATE
259 |
260 | - `#period: 10 s`
261 |
262 | ```
263 | jdk.ThreadContextSwitchRate {
264 | startTime = 16:08:04.693
265 | switchRate = 21159.135 Hz
266 | }
267 | ```
--------------------------------------------------------------------------------
/profile-jre.txt:
--------------------------------------------------------------------------------
1 | jdk.ThreadAllocationStatistics#enabled: true
2 | jdk.ThreadAllocationStatistics#period: everyChunk
3 | jdk.ClassLoadingStatistics#enabled: true
4 | jdk.ClassLoadingStatistics#period: 1000 ms
5 | jdk.ClassLoaderStatistics#enabled: true
6 | jdk.ClassLoaderStatistics#period: everyChunk
7 | jdk.JavaThreadStatistics#enabled: true
8 | jdk.JavaThreadStatistics#period: 1000 ms
9 | jdk.SymbolTableStatistics#enabled: true
10 | jdk.SymbolTableStatistics#period: 10 s
11 | jdk.StringTableStatistics#enabled: true
12 | jdk.StringTableStatistics#period: 10 s
13 | jdk.PlaceholderTableStatistics#enabled: true
14 | jdk.PlaceholderTableStatistics#period: 10 s
15 | jdk.LoaderConstraintsTableStatistics#enabled: true
16 | jdk.LoaderConstraintsTableStatistics#period: 10 s
17 | jdk.ProtectionDomainCacheTableStatistics#enabled: true
18 | jdk.ProtectionDomainCacheTableStatistics#period: 10 s
19 | jdk.ThreadStart#enabled: true
20 | jdk.ThreadEnd#enabled: true
21 | jdk.ThreadSleep#enabled: true
22 | jdk.ThreadSleep#stackTrace: true
23 | jdk.ThreadSleep#threshold: 10 ms
24 | jdk.ThreadPark#enabled: true
25 | jdk.ThreadPark#stackTrace: true
26 | jdk.ThreadPark#threshold: 10 ms
27 | jdk.JavaMonitorEnter#enabled: true
28 | jdk.JavaMonitorEnter#stackTrace: true
29 | jdk.JavaMonitorEnter#threshold: 10 ms
30 | jdk.JavaMonitorWait#enabled: true
31 | jdk.JavaMonitorWait#stackTrace: true
32 | jdk.JavaMonitorWait#threshold: 10 ms
33 | jdk.JavaMonitorInflate#enabled: true
34 | jdk.JavaMonitorInflate#stackTrace: true
35 | jdk.JavaMonitorInflate#threshold: 10 ms
36 | jdk.BiasedLockRevocation#enabled: true
37 | jdk.BiasedLockRevocation#stackTrace: true
38 | jdk.BiasedLockRevocation#threshold: 0 ms
39 | jdk.BiasedLockSelfRevocation#enabled: true
40 | jdk.BiasedLockSelfRevocation#stackTrace: true
41 | jdk.BiasedLockSelfRevocation#threshold: 0 ms
42 | jdk.BiasedLockClassRevocation#enabled: true
43 | jdk.BiasedLockClassRevocation#stackTrace: true
44 | jdk.BiasedLockClassRevocation#threshold: 0 ms
45 | jdk.ReservedStackActivation#enabled: true
46 | jdk.ReservedStackActivation#stackTrace: true
47 | jdk.ClassLoad#enabled: false
48 | jdk.ClassLoad#stackTrace: true
49 | jdk.ClassLoad#threshold: 0 ms
50 | jdk.ClassDefine#enabled: false
51 | jdk.ClassDefine#stackTrace: true
52 | jdk.ClassUnload#enabled: false
53 | jdk.JVMInformation#enabled: true
54 | jdk.JVMInformation#period: beginChunk
55 | jdk.InitialSystemProperty#enabled: true
56 | jdk.InitialSystemProperty#period: beginChunk
57 | jdk.ExecutionSample#enabled: true
58 | jdk.ExecutionSample#period: 10 ms
59 | jdk.NativeMethodSample#enabled: true
60 | jdk.NativeMethodSample#period: 20 ms
61 | jdk.SafepointBegin#enabled: true
62 | jdk.SafepointBegin#threshold: 0 ms
63 | jdk.SafepointStateSynchronization#enabled: false
64 | jdk.SafepointStateSynchronization#threshold: 0 ms
65 | jdk.SafepointCleanup#enabled: false
66 | jdk.SafepointCleanup#threshold: 0 ms
67 | jdk.SafepointCleanupTask#enabled: false
68 | jdk.SafepointCleanupTask#threshold: 0 ms
69 | jdk.SafepointEnd#enabled: false
70 | jdk.SafepointEnd#threshold: 0 ms
71 | jdk.ExecuteVMOperation#enabled: true
72 | jdk.ExecuteVMOperation#threshold: 0 ms
73 | jdk.Shutdown#enabled: true
74 | jdk.Shutdown#stackTrace: true
75 | jdk.ThreadDump#enabled: true
76 | jdk.ThreadDump#period: 60 s
77 | jdk.IntFlag#enabled: true
78 | jdk.IntFlag#period: beginChunk
79 | jdk.UnsignedIntFlag#enabled: true
80 | jdk.UnsignedIntFlag#period: beginChunk
81 | jdk.LongFlag#enabled: true
82 | jdk.LongFlag#period: beginChunk
83 | jdk.UnsignedLongFlag#enabled: true
84 | jdk.UnsignedLongFlag#period: beginChunk
85 | jdk.DoubleFlag#enabled: true
86 | jdk.DoubleFlag#period: beginChunk
87 | jdk.BooleanFlag#enabled: true
88 | jdk.BooleanFlag#period: beginChunk
89 | jdk.StringFlag#enabled: true
90 | jdk.StringFlag#period: beginChunk
91 | jdk.IntFlagChanged#enabled: true
92 | jdk.UnsignedIntFlagChanged#enabled: true
93 | jdk.LongFlagChanged#enabled: true
94 | jdk.UnsignedLongFlagChanged#enabled: true
95 | jdk.DoubleFlagChanged#enabled: true
96 | jdk.BooleanFlagChanged#enabled: true
97 | jdk.StringFlagChanged#enabled: true
98 | jdk.ObjectCount#enabled: false
99 | jdk.ObjectCount#period: everyChunk
100 | jdk.GCConfiguration#enabled: true
101 | jdk.GCConfiguration#period: everyChunk
102 | jdk.GCHeapConfiguration#enabled: true
103 | jdk.GCHeapConfiguration#period: beginChunk
104 | jdk.YoungGenerationConfiguration#enabled: true
105 | jdk.YoungGenerationConfiguration#period: beginChunk
106 | jdk.GCTLABConfiguration#enabled: true
107 | jdk.GCTLABConfiguration#period: beginChunk
108 | jdk.GCSurvivorConfiguration#enabled: true
109 | jdk.GCSurvivorConfiguration#period: beginChunk
110 | jdk.ObjectCountAfterGC#enabled: false
111 | jdk.GCHeapSummary#enabled: true
112 | jdk.PSHeapSummary#enabled: true
113 | jdk.G1HeapSummary#enabled: true
114 | jdk.MetaspaceSummary#enabled: true
115 | jdk.MetaspaceGCThreshold#enabled: true
116 | jdk.MetaspaceAllocationFailure#enabled: true
117 | jdk.MetaspaceAllocationFailure#stackTrace: true
118 | jdk.MetaspaceOOM#enabled: true
119 | jdk.MetaspaceOOM#stackTrace: true
120 | jdk.MetaspaceChunkFreeListSummary#enabled: true
121 | jdk.GarbageCollection#enabled: true
122 | jdk.GarbageCollection#threshold: 0 ms
123 | jdk.ParallelOldGarbageCollection#enabled: true
124 | jdk.ParallelOldGarbageCollection#threshold: 0 ms
125 | jdk.YoungGarbageCollection#enabled: true
126 | jdk.YoungGarbageCollection#threshold: 0 ms
127 | jdk.OldGarbageCollection#enabled: true
128 | jdk.OldGarbageCollection#threshold: 0 ms
129 | jdk.G1GarbageCollection#enabled: true
130 | jdk.G1GarbageCollection#threshold: 0 ms
131 | jdk.GCPhasePause#enabled: true
132 | jdk.GCPhasePause#threshold: 0 ms
133 | jdk.GCPhasePauseLevel1#enabled: true
134 | jdk.GCPhasePauseLevel1#threshold: 0 ms
135 | jdk.GCPhasePauseLevel2#enabled: true
136 | jdk.GCPhasePauseLevel2#threshold: 0 ms
137 | jdk.GCPhasePauseLevel3#enabled: false
138 | jdk.GCPhasePauseLevel3#threshold: 0 ms
139 | jdk.GCPhasePauseLevel4#enabled: false
140 | jdk.GCPhasePauseLevel4#threshold: 0 ms
141 | jdk.GCPhaseConcurrent#enabled: true
142 | jdk.GCPhaseConcurrent#threshold: 0 ms
143 | jdk.GCReferenceStatistics#enabled: true
144 | jdk.PromotionFailed#enabled: true
145 | jdk.EvacuationFailed#enabled: true
146 | jdk.EvacuationInformation#enabled: true
147 | jdk.G1MMU#enabled: true
148 | jdk.G1EvacuationYoungStatistics#enabled: true
149 | jdk.G1EvacuationOldStatistics#enabled: true
150 | jdk.GCPhaseParallel#enabled: true
151 | jdk.GCPhaseParallel#threshold: 0 ms
152 | jdk.G1BasicIHOP#enabled: true
153 | jdk.G1AdaptiveIHOP#enabled: true
154 | jdk.PromoteObjectInNewPLAB#enabled: true
155 | jdk.PromoteObjectOutsidePLAB#enabled: true
156 | jdk.ConcurrentModeFailure#enabled: true
157 | jdk.AllocationRequiringGC#enabled: false
158 | jdk.AllocationRequiringGC#stackTrace: true
159 | jdk.TenuringDistribution#enabled: true
160 | jdk.G1HeapRegionInformation#enabled: false
161 | jdk.G1HeapRegionInformation#period: everyChunk
162 | jdk.G1HeapRegionTypeChange#enabled: false
163 | jdk.ShenandoahHeapRegionInformation#enabled: false
164 | jdk.ShenandoahHeapRegionInformation#period: everyChunk
165 | jdk.ShenandoahHeapRegionStateChange#enabled: false
166 | jdk.OldObjectSample#enabled: true
167 | jdk.OldObjectSample#stackTrace: true
168 | jdk.OldObjectSample#cutoff: 0 ns
169 | jdk.CompilerConfiguration#enabled: true
170 | jdk.CompilerConfiguration#period: beginChunk
171 | jdk.CompilerStatistics#enabled: true
172 | jdk.CompilerStatistics#period: 1000 ms
173 | jdk.Compilation#enabled: true
174 | jdk.Compilation#threshold: 100 ms
175 | jdk.CompilerPhase#enabled: true
176 | jdk.CompilerPhase#threshold: 10 s
177 | jdk.CompilationFailure#enabled: true
178 | jdk.CompilerInlining#enabled: false
179 | jdk.CodeSweeperConfiguration#enabled: true
180 | jdk.CodeSweeperConfiguration#period: beginChunk
181 | jdk.CodeSweeperStatistics#enabled: true
182 | jdk.CodeSweeperStatistics#period: everyChunk
183 | jdk.SweepCodeCache#enabled: true
184 | jdk.SweepCodeCache#threshold: 100 ms
185 | jdk.CodeCacheConfiguration#enabled: true
186 | jdk.CodeCacheConfiguration#period: beginChunk
187 | jdk.CodeCacheStatistics#enabled: true
188 | jdk.CodeCacheStatistics#period: everyChunk
189 | jdk.CodeCacheFull#enabled: true
190 | jdk.OSInformation#enabled: true
191 | jdk.OSInformation#period: beginChunk
192 | jdk.VirtualizationInformation#enabled: true
193 | jdk.VirtualizationInformation#period: beginChunk
194 | jdk.CPUInformation#enabled: true
195 | jdk.CPUInformation#period: beginChunk
196 | jdk.ThreadContextSwitchRate#enabled: true
197 | jdk.ThreadContextSwitchRate#period: 10 s
198 | jdk.CPULoad#enabled: true
199 | jdk.CPULoad#period: 1000 ms
200 | jdk.ThreadCPULoad#enabled: true
201 | jdk.ThreadCPULoad#period: 10 s
202 | jdk.CPUTimeStampCounter#enabled: true
203 | jdk.CPUTimeStampCounter#period: beginChunk
204 | jdk.SystemProcess#enabled: true
205 | jdk.SystemProcess#period: endChunk
206 | jdk.NetworkUtilization#enabled: true
207 | jdk.NetworkUtilization#period: 5 s
208 | jdk.InitialEnvironmentVariable#enabled: true
209 | jdk.InitialEnvironmentVariable#period: beginChunk
210 | jdk.PhysicalMemory#enabled: true
211 | jdk.PhysicalMemory#period: everyChunk
212 | jdk.ObjectAllocationInNewTLAB#enabled: true
213 | jdk.ObjectAllocationInNewTLAB#stackTrace: true
214 | jdk.ObjectAllocationOutsideTLAB#enabled: true
215 | jdk.ObjectAllocationOutsideTLAB#stackTrace: true
216 | jdk.NativeLibrary#enabled: true
217 | jdk.NativeLibrary#period: everyChunk
218 | jdk.ModuleRequire#enabled: true
219 | jdk.ModuleRequire#period: endChunk
220 | jdk.ModuleExport#enabled: true
221 | jdk.ModuleExport#period: endChunk
222 | jdk.FileForce#enabled: true
223 | jdk.FileForce#stackTrace: true
224 | jdk.FileForce#threshold: 10 ms
225 | jdk.FileRead#enabled: true
226 | jdk.FileRead#stackTrace: true
227 | jdk.FileRead#threshold: 10 ms
228 | jdk.FileWrite#enabled: true
229 | jdk.FileWrite#stackTrace: true
230 | jdk.FileWrite#threshold: 10 ms
231 | jdk.SocketRead#enabled: true
232 | jdk.SocketRead#stackTrace: true
233 | jdk.SocketRead#threshold: 10 ms
234 | jdk.SocketWrite#enabled: true
235 | jdk.SocketWrite#stackTrace: true
236 | jdk.SocketWrite#threshold: 10 ms
237 | jdk.SecurityPropertyModification#enabled: false
238 | jdk.SecurityPropertyModification#stackTrace: true
239 | jdk.TLSHandshake#enabled: false
240 | jdk.TLSHandshake#stackTrace: true
241 | jdk.X509Validation#enabled: false
242 | jdk.X509Validation#stackTrace: true
243 | jdk.X509Certificate#enabled: false
244 | jdk.X509Certificate#stackTrace: true
245 | jdk.JavaExceptionThrow#enabled: false
246 | jdk.JavaExceptionThrow#stackTrace: true
247 | jdk.JavaErrorThrow#enabled: true
248 | jdk.JavaErrorThrow#stackTrace: true
249 | jdk.ExceptionStatistics#enabled: true
250 | jdk.ExceptionStatistics#period: 1000 ms
251 | jdk.ActiveRecording#enabled: true
252 | jdk.ActiveSetting#enabled: true
253 | jdk.Flush#enabled: true
254 | jdk.Flush#threshold: 0 ns
255 | jdk.FlushStorage#enabled: true
256 | jdk.FlushStorage#threshold: 0 ns
257 | jdk.FlushStacktrace#enabled: true
258 | jdk.FlushStacktrace#threshold: 0 ns
259 | jdk.FlushStringPool#enabled: true
260 | jdk.FlushStringPool#threshold: 0 ns
261 | jdk.FlushMetadata#enabled: true
262 | jdk.FlushMetadata#threshold: 0 ns
263 | jdk.FlushTypeSet#enabled: true
264 | jdk.FlushTypeSet#threshold: 0 ns
265 | jdk.DataLoss#enabled: true
266 | jdk.DumpReason#enabled: true
267 | jdk.ZPageAllocation#enabled: true
268 | jdk.ZPageAllocation#threshold: 10 ms
269 | jdk.ZThreadPhase#enabled: true
270 | jdk.ZThreadPhase#threshold: 0 ms
271 | jdk.ZStatisticsCounter#enabled: false
272 | jdk.ZStatisticsCounter#threshold: 0 ms
273 | jdk.ZStatisticsSampler#enabled: false
274 | jdk.ZStatisticsSampler#threshold: 0 ms
--------------------------------------------------------------------------------
/default-jre.txt:
--------------------------------------------------------------------------------
1 | jdk.ThreadAllocationStatistics#enabled: true
2 | jdk.ThreadAllocationStatistics#period: everyChunk
3 | jdk.ClassLoadingStatistics#enabled: true
4 | jdk.ClassLoadingStatistics#period: 1000 ms
5 | jdk.ClassLoaderStatistics#enabled: true
6 | jdk.ClassLoaderStatistics#period: everyChunk
7 | jdk.JavaThreadStatistics#enabled: true
8 | jdk.JavaThreadStatistics#period: 1000 ms
9 | jdk.SymbolTableStatistics#enabled: true
10 | jdk.SymbolTableStatistics#period: 10 s
11 | jdk.StringTableStatistics#enabled: true
12 | jdk.StringTableStatistics#period: 10 s
13 | jdk.PlaceholderTableStatistics#enabled: true
14 | jdk.PlaceholderTableStatistics#period: 10 s
15 | jdk.LoaderConstraintsTableStatistics#enabled: true
16 | jdk.LoaderConstraintsTableStatistics#period: 10 s
17 | jdk.ProtectionDomainCacheTableStatistics#enabled: true
18 | jdk.ProtectionDomainCacheTableStatistics#period: 10 s
19 | jdk.ThreadStart#enabled: true
20 | jdk.ThreadEnd#enabled: true
21 | jdk.ThreadSleep#enabled: true
22 | jdk.ThreadSleep#stackTrace: true
23 | jdk.ThreadSleep#threshold: 20 ms
24 | jdk.ThreadPark#enabled: true
25 | jdk.ThreadPark#stackTrace: true
26 | jdk.ThreadPark#threshold: 20 ms
27 | jdk.JavaMonitorEnter#enabled: true
28 | jdk.JavaMonitorEnter#stackTrace: true
29 | jdk.JavaMonitorEnter#threshold: 20 ms
30 | jdk.JavaMonitorWait#enabled: true
31 | jdk.JavaMonitorWait#stackTrace: true
32 | jdk.JavaMonitorWait#threshold: 20 ms
33 | jdk.JavaMonitorInflate#enabled: false
34 | jdk.JavaMonitorInflate#stackTrace: true
35 | jdk.JavaMonitorInflate#threshold: 20 ms
36 | jdk.BiasedLockRevocation#enabled: true
37 | jdk.BiasedLockRevocation#stackTrace: true
38 | jdk.BiasedLockRevocation#threshold: 0 ms
39 | jdk.BiasedLockSelfRevocation#enabled: true
40 | jdk.BiasedLockSelfRevocation#stackTrace: true
41 | jdk.BiasedLockSelfRevocation#threshold: 0 ms
42 | jdk.BiasedLockClassRevocation#enabled: true
43 | jdk.BiasedLockClassRevocation#stackTrace: true
44 | jdk.BiasedLockClassRevocation#threshold: 0 ms
45 | jdk.ReservedStackActivation#enabled: true
46 | jdk.ReservedStackActivation#stackTrace: true
47 | jdk.ClassLoad#enabled: false
48 | jdk.ClassLoad#stackTrace: true
49 | jdk.ClassLoad#threshold: 0 ms
50 | jdk.ClassDefine#enabled: false
51 | jdk.ClassDefine#stackTrace: true
52 | jdk.ClassUnload#enabled: false
53 | jdk.JVMInformation#enabled: true
54 | jdk.JVMInformation#period: beginChunk
55 | jdk.InitialSystemProperty#enabled: true
56 | jdk.InitialSystemProperty#period: beginChunk
57 | jdk.ExecutionSample#enabled: true
58 | jdk.ExecutionSample#period: 20 ms
59 | jdk.NativeMethodSample#enabled: true
60 | jdk.NativeMethodSample#period: 20 ms
61 | jdk.SafepointBegin#enabled: true
62 | jdk.SafepointBegin#threshold: 10 ms
63 | jdk.SafepointStateSynchronization#enabled: false
64 | jdk.SafepointStateSynchronization#threshold: 10 ms
65 | jdk.SafepointCleanup#enabled: false
66 | jdk.SafepointCleanup#threshold: 10 ms
67 | jdk.SafepointCleanupTask#enabled: false
68 | jdk.SafepointCleanupTask#threshold: 10 ms
69 | jdk.SafepointEnd#enabled: false
70 | jdk.SafepointEnd#threshold: 10 ms
71 | jdk.ExecuteVMOperation#enabled: true
72 | jdk.ExecuteVMOperation#threshold: 10 ms
73 | jdk.Shutdown#enabled: true
74 | jdk.Shutdown#stackTrace: true
75 | jdk.ThreadDump#enabled: true
76 | jdk.ThreadDump#period: everyChunk
77 | jdk.IntFlag#enabled: true
78 | jdk.IntFlag#period: beginChunk
79 | jdk.UnsignedIntFlag#enabled: true
80 | jdk.UnsignedIntFlag#period: beginChunk
81 | jdk.LongFlag#enabled: true
82 | jdk.LongFlag#period: beginChunk
83 | jdk.UnsignedLongFlag#enabled: true
84 | jdk.UnsignedLongFlag#period: beginChunk
85 | jdk.DoubleFlag#enabled: true
86 | jdk.DoubleFlag#period: beginChunk
87 | jdk.BooleanFlag#enabled: true
88 | jdk.BooleanFlag#period: beginChunk
89 | jdk.StringFlag#enabled: true
90 | jdk.StringFlag#period: beginChunk
91 | jdk.IntFlagChanged#enabled: true
92 | jdk.UnsignedIntFlagChanged#enabled: true
93 | jdk.LongFlagChanged#enabled: true
94 | jdk.UnsignedLongFlagChanged#enabled: true
95 | jdk.DoubleFlagChanged#enabled: true
96 | jdk.BooleanFlagChanged#enabled: true
97 | jdk.StringFlagChanged#enabled: true
98 | jdk.ObjectCount#enabled: false
99 | jdk.ObjectCount#period: everyChunk
100 | jdk.GCConfiguration#enabled: true
101 | jdk.GCConfiguration#period: everyChunk
102 | jdk.GCHeapConfiguration#enabled: true
103 | jdk.GCHeapConfiguration#period: beginChunk
104 | jdk.YoungGenerationConfiguration#enabled: true
105 | jdk.YoungGenerationConfiguration#period: beginChunk
106 | jdk.GCTLABConfiguration#enabled: true
107 | jdk.GCTLABConfiguration#period: beginChunk
108 | jdk.GCSurvivorConfiguration#enabled: true
109 | jdk.GCSurvivorConfiguration#period: beginChunk
110 | jdk.ObjectCountAfterGC#enabled: false
111 | jdk.GCHeapSummary#enabled: true
112 | jdk.PSHeapSummary#enabled: true
113 | jdk.G1HeapSummary#enabled: true
114 | jdk.MetaspaceSummary#enabled: true
115 | jdk.MetaspaceGCThreshold#enabled: true
116 | jdk.MetaspaceAllocationFailure#enabled: true
117 | jdk.MetaspaceAllocationFailure#stackTrace: true
118 | jdk.MetaspaceOOM#enabled: true
119 | jdk.MetaspaceOOM#stackTrace: true
120 | jdk.MetaspaceChunkFreeListSummary#enabled: true
121 | jdk.GarbageCollection#enabled: true
122 | jdk.GarbageCollection#threshold: 0 ms
123 | jdk.ParallelOldGarbageCollection#enabled: true
124 | jdk.ParallelOldGarbageCollection#threshold: 0 ms
125 | jdk.YoungGarbageCollection#enabled: true
126 | jdk.YoungGarbageCollection#threshold: 0 ms
127 | jdk.OldGarbageCollection#enabled: true
128 | jdk.OldGarbageCollection#threshold: 0 ms
129 | jdk.G1GarbageCollection#enabled: true
130 | jdk.G1GarbageCollection#threshold: 0 ms
131 | jdk.GCPhasePause#enabled: true
132 | jdk.GCPhasePause#threshold: 0 ms
133 | jdk.GCPhasePauseLevel1#enabled: true
134 | jdk.GCPhasePauseLevel1#threshold: 0 ms
135 | jdk.GCPhasePauseLevel2#enabled: true
136 | jdk.GCPhasePauseLevel2#threshold: 0 ms
137 | jdk.GCPhasePauseLevel3#enabled: false
138 | jdk.GCPhasePauseLevel3#threshold: 0 ms
139 | jdk.GCPhasePauseLevel4#enabled: false
140 | jdk.GCPhasePauseLevel4#threshold: 0 ms
141 | jdk.GCPhaseConcurrent#enabled: true
142 | jdk.GCPhaseConcurrent#threshold: 0 ms
143 | jdk.GCReferenceStatistics#enabled: true
144 | jdk.PromotionFailed#enabled: true
145 | jdk.EvacuationFailed#enabled: true
146 | jdk.EvacuationInformation#enabled: true
147 | jdk.G1MMU#enabled: true
148 | jdk.G1EvacuationYoungStatistics#enabled: true
149 | jdk.G1EvacuationOldStatistics#enabled: true
150 | jdk.GCPhaseParallel#enabled: true
151 | jdk.GCPhaseParallel#threshold: 0 ms
152 | jdk.G1BasicIHOP#enabled: true
153 | jdk.G1AdaptiveIHOP#enabled: true
154 | jdk.PromoteObjectInNewPLAB#enabled: false
155 | jdk.PromoteObjectOutsidePLAB#enabled: false
156 | jdk.ConcurrentModeFailure#enabled: true
157 | jdk.AllocationRequiringGC#enabled: false
158 | jdk.AllocationRequiringGC#stackTrace: true
159 | jdk.TenuringDistribution#enabled: true
160 | jdk.G1HeapRegionInformation#enabled: false
161 | jdk.G1HeapRegionInformation#period: everyChunk
162 | jdk.G1HeapRegionTypeChange#enabled: false
163 | jdk.ShenandoahHeapRegionInformation#enabled: false
164 | jdk.ShenandoahHeapRegionInformation#period: everyChunk
165 | jdk.ShenandoahHeapRegionStateChange#enabled: false
166 | jdk.OldObjectSample#enabled: true
167 | jdk.OldObjectSample#stackTrace: false
168 | jdk.OldObjectSample#cutoff: 0 ns
169 | jdk.CompilerConfiguration#enabled: true
170 | jdk.CompilerConfiguration#period: beginChunk
171 | jdk.CompilerStatistics#enabled: true
172 | jdk.CompilerStatistics#period: 1000 ms
173 | jdk.Compilation#enabled: true
174 | jdk.Compilation#threshold: 1000 ms
175 | jdk.CompilerPhase#enabled: true
176 | jdk.CompilerPhase#threshold: 60 s
177 | jdk.CompilationFailure#enabled: false
178 | jdk.CompilerInlining#enabled: false
179 | jdk.CodeSweeperConfiguration#enabled: true
180 | jdk.CodeSweeperConfiguration#period: beginChunk
181 | jdk.CodeSweeperStatistics#enabled: true
182 | jdk.CodeSweeperStatistics#period: everyChunk
183 | jdk.SweepCodeCache#enabled: true
184 | jdk.SweepCodeCache#threshold: 100 ms
185 | jdk.CodeCacheConfiguration#enabled: true
186 | jdk.CodeCacheConfiguration#period: beginChunk
187 | jdk.CodeCacheStatistics#enabled: true
188 | jdk.CodeCacheStatistics#period: everyChunk
189 | jdk.CodeCacheFull#enabled: true
190 | jdk.OSInformation#enabled: true
191 | jdk.OSInformation#period: beginChunk
192 | jdk.VirtualizationInformation#enabled: true
193 | jdk.VirtualizationInformation#period: beginChunk
194 | jdk.CPUInformation#enabled: true
195 | jdk.CPUInformation#period: beginChunk
196 | jdk.ThreadContextSwitchRate#enabled: true
197 | jdk.ThreadContextSwitchRate#period: 10 s
198 | jdk.CPULoad#enabled: true
199 | jdk.CPULoad#period: 1000 ms
200 | jdk.ThreadCPULoad#enabled: true
201 | jdk.ThreadCPULoad#period: 10 s
202 | jdk.CPUTimeStampCounter#enabled: true
203 | jdk.CPUTimeStampCounter#period: beginChunk
204 | jdk.SystemProcess#enabled: true
205 | jdk.SystemProcess#period: endChunk
206 | jdk.NetworkUtilization#enabled: true
207 | jdk.NetworkUtilization#period: 5 s
208 | jdk.InitialEnvironmentVariable#enabled: true
209 | jdk.InitialEnvironmentVariable#period: beginChunk
210 | jdk.PhysicalMemory#enabled: true
211 | jdk.PhysicalMemory#period: everyChunk
212 | jdk.ObjectAllocationInNewTLAB#enabled: false
213 | jdk.ObjectAllocationInNewTLAB#stackTrace: true
214 | jdk.ObjectAllocationOutsideTLAB#enabled: false
215 | jdk.ObjectAllocationOutsideTLAB#stackTrace: true
216 | jdk.NativeLibrary#enabled: true
217 | jdk.NativeLibrary#period: everyChunk
218 | jdk.ModuleRequire#enabled: true
219 | jdk.ModuleRequire#period: endChunk
220 | jdk.ModuleExport#enabled: true
221 | jdk.ModuleExport#period: endChunk
222 | jdk.FileForce#enabled: true
223 | jdk.FileForce#stackTrace: true
224 | jdk.FileForce#threshold: 20 ms
225 | jdk.FileRead#enabled: true
226 | jdk.FileRead#stackTrace: true
227 | jdk.FileRead#threshold: 20 ms
228 | jdk.FileWrite#enabled: true
229 | jdk.FileWrite#stackTrace: true
230 | jdk.FileWrite#threshold: 20 ms
231 | jdk.SocketRead#enabled: true
232 | jdk.SocketRead#stackTrace: true
233 | jdk.SocketRead#threshold: 20 ms
234 | jdk.SocketWrite#enabled: true
235 | jdk.SocketWrite#stackTrace: true
236 | jdk.SocketWrite#threshold: 20 ms
237 | jdk.SecurityPropertyModification#enabled: false
238 | jdk.SecurityPropertyModification#stackTrace: true
239 | jdk.TLSHandshake#enabled: false
240 | jdk.TLSHandshake#stackTrace: true
241 | jdk.X509Validation#enabled: false
242 | jdk.X509Validation#stackTrace: true
243 | jdk.X509Certificate#enabled: false
244 | jdk.X509Certificate#stackTrace: true
245 | jdk.JavaExceptionThrow#enabled: false
246 | jdk.JavaExceptionThrow#stackTrace: true
247 | jdk.JavaErrorThrow#enabled: true
248 | jdk.JavaErrorThrow#stackTrace: true
249 | jdk.ExceptionStatistics#enabled: true
250 | jdk.ExceptionStatistics#period: 1000 ms
251 | jdk.ActiveRecording#enabled: true
252 | jdk.ActiveSetting#enabled: true
253 | jdk.Flush#enabled: true
254 | jdk.Flush#threshold: 0 ns
255 | jdk.FlushStorage#enabled: true
256 | jdk.FlushStorage#threshold: 0 ns
257 | jdk.FlushStacktrace#enabled: true
258 | jdk.FlushStacktrace#threshold: 0 ns
259 | jdk.FlushStringPool#enabled: true
260 | jdk.FlushStringPool#threshold: 0 ns
261 | jdk.FlushMetadata#enabled: true
262 | jdk.FlushMetadata#threshold: 0 ns
263 | jdk.FlushTypeSet#enabled: true
264 | jdk.FlushTypeSet#threshold: 0 ns
265 | jdk.DataLoss#enabled: true
266 | jdk.DumpReason#enabled: true
267 | jdk.ZPageAllocation#enabled: true
268 | jdk.ZPageAllocation#threshold: 10 ms
269 | jdk.ZThreadPhase#enabled: true
270 | jdk.ZThreadPhase#threshold: 0 ms
271 | jdk.ZStatisticsCounter#enabled: false
272 | jdk.ZStatisticsCounter#threshold: 0 ms
273 | jdk.ZStatisticsSampler#enabled: false
274 | jdk.ZStatisticsSampler#threshold: 0 ms
--------------------------------------------------------------------------------
/THREAD_DUMP.md:
--------------------------------------------------------------------------------
1 | # THREAD_DUMP
2 |
3 | - `#period: 60 s`
4 |
5 | ```
6 | jdk.ThreadDump {
7 | startTime = 12:23:59.509
8 | result = "2019-12-31 12:23:58
9 | Full thread dump OpenJDK 64-Bit Server VM (14-ea+28-1366 mixed mode, sharing):
10 |
11 | Threads class SMR info:
12 | _java_thread_list=0x00007fc79400d0f0, length=20, elements={
13 | 0x00007fc7f41f0800, 0x00007fc7f41f2800, 0x00007fc7f41f9800, 0x00007fc7f41fb800,
14 | 0x00007fc7f41fd800, 0x00007fc7f41ff800, 0x00007fc7f4201800, 0x00007fc7f421f000,
15 | 0x00007fc7f42b8000, 0x00007fc7f42b8800, 0x00007fc7f42ed800, 0x00007fc7f4309000,
16 | 0x00007fc7f430a800, 0x00007fc7f430c000, 0x00007fc7f430e000, 0x00007fc7f402b800,
17 | 0x00007fc78403f000, 0x00007fc7840ce800, 0x00007fc748001800, 0x00007fc7ac001000
18 | }
19 |
20 | "Reference Handler" #2 daemon prio=10 os_prio=0 cpu=1,02ms elapsed=5,99s tid=0x00007fc7f41f0800 nid=0x6637 waiting on condition [0x00007fc7d8562000]
21 | java.lang.Thread.State: RUNNABLE
22 | at java.lang.ref.Reference.waitForReferencePendingList(java.base@14-ea/Native Method)
23 | at java.lang.ref.Reference.processPendingReferences(java.base@14-ea/Reference.java:241)
24 | at java.lang.ref.Reference$ReferenceHandler.run(java.base@14-ea/Reference.java:213)
25 |
26 | "Finalizer" #3 daemon prio=8 os_prio=0 cpu=0,45ms elapsed=5,99s tid=0x00007fc7f41f2800 nid=0x6638 in Object.wait() [0x00007fc7d8461000]
27 | java.lang.Thread.State: WAITING (on object monitor)
28 | at java.lang.Object.wait(java.base@14-ea/Native Method)
29 | - waiting on <0x00000000c3d00178> (a java.lang.ref.ReferenceQueue$Lock)
30 | at java.lang.ref.ReferenceQueue.remove(java.base@14-ea/ReferenceQueue.java:155)
31 | - locked <0x00000000c3d00178> (a java.lang.ref.ReferenceQueue$Lock)
32 | at java.lang.ref.ReferenceQueue.remove(java.base@14-ea/ReferenceQueue.java:176)
33 | at java.lang.ref.Finalizer$FinalizerThread.run(java.base@14-ea/Finalizer.java:170)
34 |
35 | "Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=0,26ms elapsed=5,99s tid=0x00007fc7f41f9800 nid=0x6639 runnable [0x0000000000000000]
36 | java.lang.Thread.State: RUNNABLE
37 |
38 | "Service Thread" #5 daemon prio=9 os_prio=0 cpu=0,70ms elapsed=5,99s tid=0x00007fc7f41fb800 nid=0x663a runnable [0x0000000000000000]
39 | java.lang.Thread.State: RUNNABLE
40 |
41 | "C2 CompilerThread0" #6 daemon prio=9 os_prio=0 cpu=1202,76ms elapsed=5,99s tid=0x00007fc7f41fd800 nid=0x663b waiting on condition [0x0000000000000000]
42 | java.lang.Thread.State: RUNNABLE
43 | No compile task
44 |
45 | "C1 CompilerThread0" #9 daemon prio=9 os_prio=0 cpu=552,09ms elapsed=5,99s tid=0x00007fc7f41ff800 nid=0x663c waiting on condition [0x0000000000000000]
46 | java.lang.Thread.State: RUNNABLE
47 | No compile task
48 |
49 | "Sweeper thread" #10 daemon prio=9 os_prio=0 cpu=11,63ms elapsed=5,99s tid=0x00007fc7f4201800 nid=0x663d runnable [0x0000000000000000]
50 | java.lang.Thread.State: RUNNABLE
51 |
52 | "Common-Cleaner" #11 daemon prio=8 os_prio=0 cpu=0,90ms elapsed=5,96s tid=0x00007fc7f421f000 nid=0x6641 in Object.wait() [0x00007fc7c99ed000]
53 | java.lang.Thread.State: TIMED_WAITING (on object monitor)
54 | at java.lang.Object.wait(java.base@14-ea/Native Method)
55 | - waiting on <0x00000000c3ba4db8> (a java.lang.ref.ReferenceQueue$Lock)
56 | at java.lang.ref.ReferenceQueue.remove(java.base@14-ea/ReferenceQueue.java:155)
57 | - locked <0x00000000c3ba4db8> (a java.lang.ref.ReferenceQueue$Lock)
58 | at jdk.internal.ref.CleanerImpl.run(java.base@14-ea/CleanerImpl.java:148)
59 | at java.lang.Thread.run(java.base@14-ea/Thread.java:832)
60 | at jdk.internal.misc.InnocuousThread.run(java.base@14-ea/InnocuousThread.java:134)
61 |
62 | "Monitor Ctrl-Break" #12 daemon prio=5 os_prio=0 cpu=17,00ms elapsed=5,91s tid=0x00007fc7f42b8000 nid=0x6643 runnable [0x00007fc7c97eb000]
63 | java.lang.Thread.State: RUNNABLE
64 | at sun.nio.ch.SocketDispatcher.read0(java.base@14-ea/Native Method)
65 | at sun.nio.ch.SocketDispatcher.read(java.base@14-ea/SocketDispatcher.java:47)
66 | at sun.nio.ch.NioSocketImpl.tryRead(java.base@14-ea/NioSocketImpl.java:261)
67 | at sun.nio.ch.NioSocketImpl.implRead(java.base@14-ea/NioSocketImpl.java:312)
68 | at sun.nio.ch.NioSocketImpl.read(java.base@14-ea/NioSocketImpl.java:350)
69 | at sun.nio.ch.NioSocketImpl$1.read(java.base@14-ea/NioSocketImpl.java:803)
70 | at java.net.Socket$SocketInputStream.read(java.base@14-ea/Unknown Source)
71 | at sun.nio.cs.StreamDecoder.readBytes(java.base@14-ea/StreamDecoder.java:297)
72 | at sun.nio.cs.StreamDecoder.implRead(java.base@14-ea/StreamDecoder.java:339)
73 | at sun.nio.cs.StreamDecoder.read(java.base@14-ea/StreamDecoder.java:188)
74 | - locked <0x00000000c3b58bc8> (a java.io.InputStreamReader)
75 | at java.io.InputStreamReader.read(java.base@14-ea/InputStreamReader.java:181)
76 | at java.io.BufferedReader.fill(java.base@14-ea/BufferedReader.java:161)
77 | at java.io.BufferedReader.readLine(java.base@14-ea/BufferedReader.java:326)
78 | - locked <0x00000000c3b58bc8> (a java.io.InputStreamReader)
79 | at java.io.BufferedReader.readLine(java.base@14-ea/BufferedReader.java:392)
80 | at com.intellij.rt.execution.application.AppMainV2$1.run(AppMainV2.java:64)
81 |
82 | "Notification Thread" #13 daemon prio=9 os_prio=0 cpu=0,12ms elapsed=5,91s tid=0x00007fc7f42b8800 nid=0x6644 runnable [0x0000000000000000]
83 | java.lang.Thread.State: RUNNABLE
84 |
85 | "jfr-0" #14 prio=5 os_prio=0 cpu=808,68ms elapsed=5,82s tid=0x00007fc7f42ed800 nid=0x6647 in Object.wait() [0x00007fc7c94e6000]
86 | java.lang.Thread.State: TIMED_WAITING (on object monitor)
87 | at java.lang.Object.wait(java.base@14-ea/Native Method)
88 | - waiting on <0x00000000d8100450> (a java.lang.Object)
89 | at jdk.jfr.internal.Utils.waitFlush(jdk.jfr@14-ea/Utils.java:713)
90 | - locked <0x00000000d8100450> (a java.lang.Object)
91 | at jdk.jfr.internal.consumer.ChunkParser.awaitUpdatedHeader(jdk.jfr@14-ea/ChunkParser.java:297)
92 | at jdk.jfr.internal.consumer.ChunkParser.readStreamingEvent(jdk.jfr@14-ea/ChunkParser.java:202)
93 | at jdk.jfr.internal.consumer.EventDirectoryStream.processOrdered(jdk.jfr@14-ea/EventDirectoryStream.java:193)
94 | at jdk.jfr.internal.consumer.EventDirectoryStream.processRecursionSafe(jdk.jfr@14-ea/EventDirectoryStream.java:139)
95 | at jdk.jfr.internal.consumer.EventDirectoryStream.process(jdk.jfr@14-ea/EventDirectoryStream.java:97)
96 | at jdk.jfr.internal.consumer.AbstractEventStream.execute(jdk.jfr@14-ea/AbstractEventStream.java:243)
97 | at jdk.jfr.internal.consumer.AbstractEventStream$1.run(jdk.jfr@14-ea/AbstractEventStream.java:265)
98 | at jdk.jfr.internal.consumer.AbstractEventStream$1.run(jdk.jfr@14-ea/AbstractEventStream.java:262)
99 | at java.security.AccessController.executePrivileged(java.base@14-ea/AccessController.java:753)
100 | at java.security.AccessController.doPrivileged(java.base@14-ea/AccessController.java:391)
101 | at jdk.jfr.internal.consumer.AbstractEventStream.run(jdk.jfr@14-ea/AbstractEventStream.java:262)
102 | at jdk.jfr.internal.consumer.AbstractEventStream.start(jdk.jfr@14-ea/AbstractEventStream.java:222)
103 | at jdk.jfr.consumer.RecordingStream.start(jdk.jfr@14-ea/RecordingStream.java:344)
104 | at pbouda.jfr.Jfr.lambda$start$2(Jfr.java:48)
105 | at pbouda.jfr.Jfr$$Lambda$21/0x0000000800b77040.run(Unknown Source)
106 | at java.util.concurrent.Executors$RunnableAdapter.call(java.base@14-ea/Executors.java:515)
107 | at java.util.concurrent.FutureTask.run(java.base@14-ea/FutureTask.java:264)
108 | at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@14-ea/ThreadPoolExecutor.java:1130)
109 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@14-ea/ThreadPoolExecutor.java:630)
110 | at java.lang.Thread.run(java.base@14-ea/Thread.java:832)
111 |
112 | "pool-1-thread-1" #15 prio=5 os_prio=0 cpu=2372,41ms elapsed=5,82s tid=0x00007fc7f4309000 nid=0x6648 waiting on condition [0x00007fc7c93e6000]
113 | java.lang.Thread.State: WAITING (parking)
114 | at jdk.internal.misc.Unsafe.park(java.base@14-ea/Native Method)
115 | - parking to wait for <0x00000000d8100f48> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
116 | at java.util.concurrent.locks.LockSupport.park(java.base@14-ea/LockSupport.java:341)
117 | at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@14-ea/AbstractQueuedSynchronizer.java:505)
118 | at java.util.concurrent.ForkJoinPool.managedBlock(java.base@14-ea/ForkJoinPool.java:3137)
119 | at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@14-ea/AbstractQueuedSynchronizer.java:1614)
120 | at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@14-ea/ScheduledThreadPoolExecutor.java:1177)
121 | at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@14-ea/ScheduledThreadPoolExecutor.java:899)
122 | at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@14-ea/ThreadPoolExecutor.java:1056)
123 | at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@14-ea/ThreadPoolExecutor.java:1116)
124 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@14-ea/ThreadPoolExecutor.java:630)
125 | at java.lang.Thread.run(java.base@14-ea/Thread.java:832)
126 |
127 | "pool-1-thread-2" #16 prio=5 os_prio=0 cpu=2401,80ms elapsed=5,82s tid=0x00007fc7f430a800 nid=0x6649 waiting on condition [0x00007fc7c92e5000]
128 | java.lang.Thread.State: WAITING (parking)
129 | at jdk.internal.misc.Unsafe.park(java.base@14-ea/Native Method)
130 | - parking to wait for <0x00000000d8100f48> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
131 | at java.util.concurrent.locks.LockSupport.park(java.base@14-ea/LockSupport.java:341)
132 | at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@14-ea/AbstractQueuedSynchronizer.java:505)
133 | at java.util.concurrent.ForkJoinPool.managedBlock(java.base@14-ea/ForkJoinPool.java:3137)
134 | at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@14-ea/AbstractQueuedSynchronizer.java:1614)
135 | at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@14-ea/ScheduledThreadPoolExecutor.java:1177)
136 | at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@14-ea/ScheduledThreadPoolExecutor.java:899)
137 | at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@14-ea/ThreadPoolExecutor.java:1056)
138 | at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@14-ea/ThreadPoolExecutor.java:1116)
139 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@14-ea/ThreadPoolExecutor.java:630)
140 | at java.lang.Thread.run(java.base@14-ea/Thread.java:832)
141 |
142 | "pool-1-thread-3" #17 prio=5 os_prio=0 cpu=2362,10ms elapsed=5,82s tid=0x00007fc7f430c000 nid=0x664a waiting on condition [0x00007fc7c91e4000]
143 | java.lang.Thread.State: TIMED_WAITING (parking)
144 | at jdk.internal.misc.Unsafe.park(java.base@14-ea/Native Method)
145 | - parking to wait for <0x00000000d8100f48> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
146 | at java.util.concurrent.locks.LockSupport.parkNanos(java.base@14-ea/LockSupport.java:252)
147 | at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@14-ea/AbstractQueuedSynchronizer.java:1661)
148 | at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@14-ea/ScheduledThreadPoolExecutor.java:1182)
149 | at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@14-ea/ScheduledThreadPoolExecutor.java:899)
150 | at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@14-ea/ThreadPoolExecutor.java:1056)
151 | at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@14-ea/ThreadPoolExecutor.java:1116)
152 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@14-ea/ThreadPoolExecutor.java:630)
153 | at java.lang.Thread.run(java.base@14-ea/Thread.java:832)
154 |
155 | "pool-1-thread-4" #18 prio=5 os_prio=0 cpu=2467,58ms elapsed=5,82s tid=0x00007fc7f430e000 nid=0x664b waiting on condition [0x00007fc7c90e3000]
156 | java.lang.Thread.State: WAITING (parking)
157 | at jdk.internal.misc.Unsafe.park(java.base@14-ea/Native Method)
158 | - parking to wait for <0x00000000d8100f48> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
159 | at java.util.concurrent.locks.LockSupport.park(java.base@14-ea/LockSupport.java:341)
160 | at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@14-ea/AbstractQueuedSynchronizer.java:505)
161 | at java.util.concurrent.ForkJoinPool.managedBlock(java.base@14-ea/ForkJoinPool.java:3137)
162 | at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@14-ea/AbstractQueuedSynchronizer.java:1614)
163 | at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@14-ea/ScheduledThreadPoolExecutor.java:1177)
164 | at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@14-ea/ScheduledThreadPoolExecutor.java:899)
165 | at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@14-ea/ThreadPoolExecutor.java:1056)
166 | at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@14-ea/ThreadPoolExecutor.java:1116)
167 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@14-ea/ThreadPoolExecutor.java:630)
168 | at java.lang.Thread.run(java.base@14-ea/Thread.java:832)
169 |
170 | "DestroyJavaVM" #19 prio=5 os_prio=0 cpu=178,57ms elapsed=5,82s tid=0x00007fc7f402b800 nid=0x6626 waiting on condition [0x0000000000000000]
171 | java.lang.Thread.State: RUNNABLE
172 |
173 | "JFR Recorder Thread" #20 daemon prio=5 os_prio=0 cpu=4,85ms elapsed=5,78s tid=0x00007fc78403f000 nid=0x664d waiting on condition [0x0000000000000000]
174 | java.lang.Thread.State: RUNNABLE
175 |
176 | "JFR Periodic Tasks" #21 daemon prio=5 os_prio=0 cpu=15,76ms elapsed=5,02s tid=0x00007fc7840ce800 nid=0x6659 waiting on condition [0x00007fc7736ed000]
177 | java.lang.Thread.State: RUNNABLE
178 | at jdk.jfr.internal.JVM.emitEvent(jdk.jfr@14-ea/Native Method)
179 | at jdk.jfr.internal.RequestEngine$RequestHook.execute(jdk.jfr@14-ea/RequestEngine.java:69)
180 | at jdk.jfr.internal.RequestEngine.run_requests(jdk.jfr@14-ea/RequestEngine.java:235)
181 | at jdk.jfr.internal.RequestEngine.doPeriodic(jdk.jfr@14-ea/RequestEngine.java:186)
182 | at jdk.jfr.internal.PlatformRecorder.periodicTask(jdk.jfr@14-ea/PlatformRecorder.java:472)
183 | at jdk.jfr.internal.PlatformRecorder.lambda$startDiskMonitor$1(jdk.jfr@14-ea/PlatformRecorder.java:417)
184 | at jdk.jfr.internal.PlatformRecorder$$Lambda$63/0x0000000800b81c40.run(jdk.jfr@14-ea/Unknown Source)
185 | at java.lang.Thread.run(java.base@14-ea/Thread.java:832)
186 |
187 | "JFR Recording Scheduler" #24 daemon prio=5 os_prio=0 cpu=0,11ms elapsed=5,00s tid=0x00007fc748001800 nid=0x665f in Object.wait() [0x00007fc7734eb000]
188 | java.lang.Thread.State: WAITING (on object monitor)
189 | at java.lang.Object.wait(java.base@14-ea/Native Method)
190 | - waiting on <0x00000000c3ba5510> (a java.util.TaskQueue)
191 | at java.lang.Object.wait(java.base@14-ea/Object.java:321)
192 | at java.util.TimerThread.mainLoop(java.base@14-ea/Timer.java:527)
193 | - locked <0x00000000c3ba5510> (a java.util.TaskQueue)
194 | at java.util.TimerThread.run(java.base@14-ea/Timer.java:506)
195 |
196 | "Attach Listener" #26 daemon prio=9 os_prio=0 cpu=18,77ms elapsed=4,96s tid=0x00007fc7ac001000 nid=0x6663 runnable [0x0000000000000000]
197 | java.lang.Thread.State: RUNNABLE
198 |
199 | "VM Thread" os_prio=0 cpu=1640,76ms elapsed=6,00s tid=0x00007fc7f41ed800 nid=0x6635 runnable
200 |
201 | "GC Thread#0" os_prio=0 cpu=1091,94ms elapsed=6,01s tid=0x00007fc7f405c000 nid=0x6627 runnable
202 |
203 | "GC Thread#1" os_prio=0 cpu=1138,80ms elapsed=5,75s tid=0x00007fc7c0001000 nid=0x664e runnable
204 |
205 | "GC Thread#2" os_prio=0 cpu=1118,44ms elapsed=5,75s tid=0x00007fc7c0002800 nid=0x664f runnable
206 |
207 | "GC Thread#3" os_prio=0 cpu=1111,30ms elapsed=5,75s tid=0x00007fc7c0003800 nid=0x6650 runnable
208 |
209 | "GC Thread#4" os_prio=0 cpu=1114,90ms elapsed=5,75s tid=0x00007fc7c0005000 nid=0x6651 runnable
210 |
211 | "GC Thread#5" os_prio=0 cpu=1111,05ms elapsed=5,75s tid=0x00007fc7c0006800 nid=0x6652 runnable
212 |
213 | "GC Thread#6" os_prio=0 cpu=1098,08ms elapsed=5,75s tid=0x00007fc7c0007800 nid=0x6653 runnable
214 |
215 | "GC Thread#7" os_prio=0 cpu=1093,97ms elapsed=5,75s tid=0x00007fc7c0009000 nid=0x6654 runnable
216 |
217 | "G1 Main Marker" os_prio=0 cpu=3,42ms elapsed=6,01s tid=0x00007fc7f4066000 nid=0x6628 runnable
218 |
219 | "G1 Conc#0" os_prio=0 cpu=931,30ms elapsed=6,01s tid=0x00007fc7f4067800 nid=0x662b runnable
220 |
221 | "G1 Conc#1" os_prio=0 cpu=929,50ms elapsed=5,27s tid=0x00007fc7cc001000 nid=0x6657 runnable
222 |
223 | "G1 Refine#0" os_prio=0 cpu=7,89ms elapsed=6,00s tid=0x00007fc7f417c000 nid=0x662c runnable
224 |
225 | "G1 Refine#1" os_prio=0 cpu=2,36ms elapsed=3,77s tid=0x00007fc7c4001000 nid=0x667a runnable
226 |
227 | "G1 Refine#2" os_prio=0 cpu=1,45ms elapsed=2,99s tid=0x00007fc734001000 nid=0x667b runnable
228 |
229 | "G1 Refine#3" os_prio=0 cpu=3,72ms elapsed=2,99s tid=0x00007fc778179800 nid=0x667c runnable
230 |
231 | "G1 Young RemSet Sampling" os_prio=0 cpu=0,86ms elapsed=6,00s tid=0x00007fc7f417d800 nid=0x662d runnable
232 | "VM Periodic Task Thread" os_prio=0 cpu=2,94ms elapsed=5,91s tid=0x00007fc7f42ba800 nid=0x6645 waiting on condition
233 |
234 | JNI global refs: 33, weak refs: 3
235 |
236 | "
237 | }
238 | ```
--------------------------------------------------------------------------------
/CERTIFICATES.md:
--------------------------------------------------------------------------------
1 | # CERTIFICATES
2 |
3 | - https://bugs.openjdk.java.net/browse/JDK-8220239
4 | - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/security/cert/X509Certificate.html
5 |
6 | - `java --enable-preview --source 14 JfrCertificates.java https://github.com/petrbouda`
7 |
8 | ```java
9 | import jdk.jfr.Configuration;
10 | import jdk.jfr.consumer.EventStream;
11 | import jdk.jfr.consumer.RecordingStream;
12 |
13 | import java.io.IOException;
14 | import java.net.URI;
15 | import java.net.http.HttpClient;
16 | import java.net.http.HttpRequest;
17 | import java.net.http.HttpResponse;
18 | import java.nio.file.Files;
19 | import java.nio.file.Path;
20 | import java.text.ParseException;
21 | import java.util.concurrent.ExecutorService;
22 | import java.util.concurrent.Executors;
23 |
24 | public class JfrCertificates {
25 |
26 | private static final String CONFIGURATION = """
27 |
28 |
29 | true
30 | true
31 |
32 |
33 | true
34 | true
35 |
36 |
37 | true
38 | true
39 |
40 | """;
41 |
42 | public static void main(String[] args) throws IOException, ParseException, InterruptedException {
43 | startJFR();
44 |
45 | HttpRequest request = HttpRequest.newBuilder(URI.create(args[0])).build();
46 | int statusCode = HttpClient.newHttpClient()
47 | .send(request, HttpResponse.BodyHandlers.ofString())
48 | .statusCode();
49 |
50 | System.out.println("STATUS CODE: " + statusCode);
51 | }
52 |
53 | private static void startJFR() throws IOException, ParseException {
54 | Path configuration = Files.createTempFile(null, ".xml");
55 | Files.write(configuration, CONFIGURATION.getBytes());
56 |
57 | Configuration config = Configuration.create(configuration);
58 | config.getSettings().forEach((key, value) -> System.out.println(key + ": " + value));
59 |
60 | ExecutorService executor = Executors.newSingleThreadExecutor();
61 | executor.submit(() -> {
62 | try (EventStream es = new RecordingStream(config)) {
63 | es.onEvent("jdk.TLSHandshake", e -> System.out.println(e));
64 | es.onEvent("jdk.X509Validation", e -> System.out.println(e));
65 | es.onEvent("jdk.X509Certificate", e -> System.out.println(e));
66 | es.start();
67 | }
68 | });
69 | }
70 | }
71 | ```
72 |
73 | #### X509_CERTIFICATE
74 |
75 | - a list of load certificates
76 |
77 | ```
78 | jdk.X509Certificate {
79 | startTime = 16:45:28.491
80 | algorithm = "SHA256withRSA"
81 | serialNumber = "570a119742c4e3cc"
82 | subject = "CN=Actalis Authentication Root CA, O=Actalis S.p.A./03358520967, L=Milan, C=IT"
83 | issuer = "CN=Actalis Authentication Root CA, O=Actalis S.p.A./03358520967, L=Milan, C=IT"
84 | keyType = "RSA"
85 | keyLength = 4096
86 | certificateId = 1729119956
87 | validFrom = 12:22:02.000
88 | validUntil = 12:22:02.000
89 | eventThread = "main" (javaThreadId = 1)
90 | stackTrace = [
91 | sun.security.provider.X509Factory.commitEvent(X509CertImpl) line: 794
92 | sun.security.provider.X509Factory.engineGenerateCertificate(InputStream) line: 108
93 | java.security.cert.CertificateFactory.generateCertificate(InputStream) line: 355
94 | sun.security.provider.JavaKeyStore.engineLoad(InputStream, char[]) line: 766
95 | sun.security.util.KeyStoreDelegator.engineLoad(InputStream, char[]) line: 241
96 | ...
97 | ]
98 | }
99 |
100 |
101 | jdk.X509Certificate {
102 | startTime = 16:45:28.494
103 | algorithm = "SHA1withRSA"
104 | serialNumber = "1"
105 | subject = "CN=AddTrust Class 1 CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE"
106 | issuer = "CN=AddTrust Class 1 CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE"
107 | keyType = "RSA"
108 | keyLength = 2048
109 | certificateId = 764620144
110 | validFrom = 11:38:31.000
111 | validUntil = 11:38:31.000
112 | eventThread = "main" (javaThreadId = 1)
113 | stackTrace = [
114 | sun.security.provider.X509Factory.commitEvent(X509CertImpl) line: 794
115 | sun.security.provider.X509Factory.engineGenerateCertificate(InputStream) line: 108
116 | java.security.cert.CertificateFactory.generateCertificate(InputStream) line: 355
117 | sun.security.provider.JavaKeyStore.engineLoad(InputStream, char[]) line: 766
118 | sun.security.util.KeyStoreDelegator.engineLoad(InputStream, char[]) line: 241
119 | ...
120 | ]
121 | }
122 |
123 | ...
124 | ```
125 |
126 | #### X509_VALIDATION
127 |
128 | - `certificateId` shows ID to the certificate which is being validated
129 |
130 | ```
131 | jdk.X509Validation {
132 | startTime = 16:49:05.027
133 | certificateId = 7087067
134 | certificatePosition = 1
135 | validationCounter = 1
136 | eventThread = "HttpClient-1-Worker-0" (javaThreadId = 17)
137 | stackTrace = [
138 | sun.security.provider.certpath.PKIXCertPathValidator.validate(TrustAnchor, PKIX$ValidatorParams) line: 253
139 | sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIX$ValidatorParams) line: 145
140 | sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(CertPath, CertPathParameters) line: 84
141 | java.security.cert.CertPathValidator.validate(CertPath, CertPathParameters) line: 309
142 | sun.security.validator.PKIXValidator.doValidate(X509Certificate[], PKIXBuilderParameters) line: 345
143 | ...
144 | ]
145 | }
146 |
147 |
148 | jdk.X509Validation {
149 | startTime = 16:49:05.027
150 | duration = 0.127 ms
151 | certificateId = 1544128074
152 | certificatePosition = 2
153 | validationCounter = 1
154 | eventThread = "HttpClient-1-Worker-0" (javaThreadId = 17)
155 | stackTrace = [
156 | sun.security.provider.certpath.PKIXCertPathValidator.validate(TrustAnchor, PKIX$ValidatorParams) line: 258
157 | sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIX$ValidatorParams) line: 145
158 | sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(CertPath, CertPathParameters) line: 84
159 | java.security.cert.CertPathValidator.validate(CertPath, CertPathParameters) line: 309
160 | sun.security.validator.PKIXValidator.doValidate(X509Certificate[], PKIXBuilderParameters) line: 345
161 | ...
162 | ]
163 | }
164 |
165 |
166 | jdk.X509Validation {
167 | startTime = 16:49:05.027
168 | duration = 0.127 ms
169 | certificateId = 1709352777
170 | certificatePosition = 3
171 | validationCounter = 1
172 | eventThread = "HttpClient-1-Worker-0" (javaThreadId = 17)
173 | stackTrace = [
174 | sun.security.provider.certpath.PKIXCertPathValidator.validate(TrustAnchor, PKIX$ValidatorParams) line: 258
175 | sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIX$ValidatorParams) line: 145
176 | sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(CertPath, CertPathParameters) line: 84
177 | java.security.cert.CertPathValidator.validate(CertPath, CertPathParameters) line: 309
178 | sun.security.validator.PKIXValidator.doValidate(X509Certificate[], PKIXBuilderParameters) line: 345
179 | ...
180 | ]
181 | }
182 | ```
183 |
184 | #### TLS_HANDSHAKE
185 |
186 | ```
187 | jdk.TLSHandshake {
188 | startTime = 16:49:05.078
189 | peerHost = "www.google.cz"
190 | peerPort = 443
191 | protocolVersion = "TLSv1.3"
192 | cipherSuite = "TLS_AES_256_GCM_SHA384"
193 | certificateId = 1709352777
194 | eventThread = "HttpClient-1-Worker-0" (javaThreadId = 17)
195 | stackTrace = [
196 | sun.security.ssl.Finished.recordEvent(SSLSessionImpl) line: 1136
197 | sun.security.ssl.Finished$T13FinishedProducer.onProduceFinished(ClientHandshakeContext, SSLHandshake$HandshakeMessage) line: 753
198 | sun.security.ssl.Finished$T13FinishedProducer.produce(ConnectionContext, SSLHandshake$HandshakeMessage) line: 658
199 | sun.security.ssl.SSLHandshake.produce(ConnectionContext, SSLHandshake$HandshakeMessage) line: 440
200 | sun.security.ssl.Finished$T13FinishedConsumer.onConsumeFinished(ClientHandshakeContext, ByteBuffer) line: 1001
201 | ...
202 | ]
203 | }
204 | ```
205 |
206 | #### FULL STACKTRACES
207 |
208 | ```
209 | X509Certificate
210 | ---------------
211 | sun.security.provider.X509Factory.commitEvent(X509CertImpl) line: 794,
212 | sun.security.provider.X509Factory.engineGenerateCertificate(InputStream) line: 108,
213 | java.security.cert.CertificateFactory.generateCertificate(InputStream) line: 355,
214 | sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(ClientHandshakeContext, List) line: 1291,
215 | sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(ClientHandshakeContext, CertificateMessage$T13CertificateMessage) line: 1207,
216 | sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(ConnectionContext, ByteBuffer) line: 1154,
217 | sun.security.ssl.SSLHandshake.consume(ConnectionContext, ByteBuffer) line: 396,
218 | sun.security.ssl.HandshakeContext.dispatch(byte, ByteBuffer) line: 444,
219 | sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run() line: 1260,
220 | sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run() line: 1247,
221 | java.security.AccessController.executePrivileged(PrivilegedExceptionAction, AccessControlContext, Class) line: 784,
222 | java.security.AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) line: 691,
223 | sun.security.ssl.SSLEngineImpl$DelegatedTask.run() line: 1192,
224 | jdk.internal.net.http.common.SSLFlowDelegate$$Lambda$215.1624064509.accept(Object),
225 | java.util.ArrayList.forEach(Consumer) line: 1510,
226 | jdk.internal.net.http.common.SSLFlowDelegate.lambda$executeTasks$3(List) line: 1109,
227 | jdk.internal.net.http.common.SSLFlowDelegate$$Lambda$214.2081681142.run(),
228 | jdk.internal.net.http.HttpClientImpl$DelegatingExecutor.execute(Runnable) line: 155,
229 | jdk.internal.net.http.common.SSLFlowDelegate.executeTasks(List) line: 1104,
230 | jdk.internal.net.http.common.SSLFlowDelegate.doHandshake(SSLFlowDelegate$EngineResult, int) line: 1070,
231 | jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData() line: 474,
232 | jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run() line: 264,
233 | jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run() line: 175,
234 | jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler$DeferredCompleter) line: 147,
235 | jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run() line: 198,
236 | java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1130,
237 | java.util.concurrent.ThreadPoolExecutor$Worker.run() line: 630,
238 | java.lang.Thread.run() line: 832
239 |
240 | X509Validation
241 | --------------
242 | sun.security.provider.certpath.PKIXCertPathValidator.validate(TrustAnchor, PKIX$ValidatorParams) line: 253,
243 | sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIX$ValidatorParams) line: 145,
244 | sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(CertPath, CertPathParameters) line: 84,
245 | java.security.cert.CertPathValidator.validate(CertPath, CertPathParameters) line: 309,
246 | sun.security.validator.PKIXValidator.doValidate(X509Certificate[], PKIXBuilderParameters) line: 345,
247 | sun.security.validator.PKIXValidator.engineValidate(X509Certificate[], Collection, List, AlgorithmConstraints, Object) line: 259,
248 | sun.security.validator.Validator.validate(X509Certificate[], Collection, List, AlgorithmConstraints, Object) line: 264,
249 | sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509Certificate[], String, SSLEngine, boolean) line: 285,
250 | sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509Certificate[], String, SSLEngine) line: 144,
251 | sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(ClientHandshakeContext, List) line: 1310,
252 | sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(ClientHandshakeContext, CertificateMessage$T13CertificateMessage) line: 1207, sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(ConnectionContext, ByteBuffer) line: 1154, sun.security.ssl.SSLHandshake.consume(ConnectionContext, ByteBuffer) line: 396, sun.security.ssl.HandshakeContext.dispatch(byte, ByteBuffer) line: 444, sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run() line: 1260,
253 | sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run() line: 1247,
254 | java.security.AccessController.executePrivileged(PrivilegedExceptionAction, AccessControlContext, Class) line: 784,
255 | java.security.AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) line: 691,
256 | sun.security.ssl.SSLEngineImpl$DelegatedTask.run() line: 1192,
257 | jdk.internal.net.http.common.SSLFlowDelegate$$Lambda$215.627181723.accept(Object),
258 | java.util.ArrayList.forEach(Consumer) line: 1510,
259 | jdk.internal.net.http.common.SSLFlowDelegate.lambda$executeTasks$3(List) line: 1109,
260 | jdk.internal.net.http.common.SSLFlowDelegate$$Lambda$214.410888346.run(),
261 | jdk.internal.net.http.HttpClientImpl$DelegatingExecutor.execute(Runnable) line: 155,
262 | jdk.internal.net.http.common.SSLFlowDelegate.executeTasks(List) line: 1104,
263 | jdk.internal.net.http.common.SSLFlowDelegate.doHandshake(SSLFlowDelegate$EngineResult, int) line: 1070,
264 | jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData() line: 474,
265 | jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run() line: 264,
266 | jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run() line: 175,
267 | jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler$DeferredCompleter) line: 147,
268 | jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run() line: 198,
269 | java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1130,
270 | java.util.concurrent.ThreadPoolExecutor$Worker.run() line: 630,
271 | java.lang.Thread.run() line: 832
272 |
273 | TLSHandshake
274 | ------------
275 | sun.security.ssl.Finished.recordEvent(SSLSessionImpl) line: 1136,
276 | sun.security.ssl.Finished$T13FinishedProducer.onProduceFinished(ClientHandshakeContext, SSLHandshake$HandshakeMessage) line: 753,
277 | sun.security.ssl.Finished$T13FinishedProducer.produce(ConnectionContext, SSLHandshake$HandshakeMessage) line: 658,
278 | sun.security.ssl.SSLHandshake.produce(ConnectionContext, SSLHandshake$HandshakeMessage) line: 440,
279 | sun.security.ssl.Finished$T13FinishedConsumer.onConsumeFinished(ClientHandshakeContext, ByteBuffer) line: 1001,
280 | sun.security.ssl.Finished$T13FinishedConsumer.consume(ConnectionContext, ByteBuffer) line: 876,
281 | sun.security.ssl.SSLHandshake.consume(ConnectionContext, ByteBuffer) line: 396,
282 | sun.security.ssl.HandshakeContext.dispatch(byte, ByteBuffer) line: 444,
283 | sun.security.ssl.HandshakeContext.dispatch(byte, Plaintext) line: 419,
284 | sun.security.ssl.TransportContext.dispatch(Plaintext) line: 181,
285 | sun.security.ssl.SSLTransport.decode(TransportContext, ByteBuffer[], int, int, ByteBuffer[], int, int) line: 167,
286 | sun.security.ssl.SSLEngineImpl.decode(ByteBuffer[], int, int, ByteBuffer[], int, int) line: 729,
287 | sun.security.ssl.SSLEngineImpl.readRecord(ByteBuffer[], int, int, ByteBuffer[], int, int) line: 684,
288 | sun.security.ssl.SSLEngineImpl.unwrap(ByteBuffer[], int, int, ByteBuffer[], int, int) line: 499,
289 | sun.security.ssl.SSLEngineImpl.unwrap(ByteBuffer, ByteBuffer[], int, int) line: 475,
290 | javax.net.ssl.SSLEngine.unwrap(ByteBuffer, ByteBuffer) line: 634,
291 | jdk.internal.net.http.common.SSLFlowDelegate$Reader.unwrapBuffer(ByteBuffer) line: 517,
292 | jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData() line: 423,
293 | jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run() line: 264,
294 | jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run() line: 175,
295 | jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler$DeferredCompleter) line: 147,
296 | jdk.internal.net.http.common.SequentialScheduler$TryEndDeferredCompleter.complete() line: 315,
297 | jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler$DeferredCompleter) line: 149,
298 | jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run() line: 198,
299 | java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1130,
300 | java.util.concurrent.ThreadPoolExecutor$Worker.run() line: 630,
301 | java.lang.Thread.run() line: 832
302 | ```
--------------------------------------------------------------------------------
/custom-profile.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | true
6 | 1000 ms
7 |
8 |
9 |
10 |
11 | true
12 | 1000 ms
13 |
14 |
15 |
16 | true
17 | everyChunk
18 |
19 |
20 |
21 | true
22 | 1000 ms
23 |
24 |
25 |
26 | true
27 | 10 s
28 |
29 |
30 |
31 | true
32 | 10 s
33 |
34 |
35 |
36 | true
37 | 10 s
38 |
39 |
40 |
41 | true
42 | 10 s
43 |
44 |
45 |
46 | true
47 | 10 s
48 |
49 |
50 |
51 | true
52 |
53 |
54 |
55 | true
56 |
57 |
58 |
59 | true
60 | true
61 | 10 ms
62 |
63 |
64 |
65 | true
66 | true
67 | 10 ms
68 |
69 |
70 |
71 | true
72 | true
73 | 10 ms
74 |
75 |
76 |
77 | true
78 | true
79 | 10 ms
80 |
81 |
82 |
83 | true
84 | true
85 | 1 ms
86 |
87 |
88 |
89 | true
90 | true
91 | 0 ms
92 |
93 |
94 |
95 | true
96 | true
97 | 0 ms
98 |
99 |
100 |
101 | true
102 | true
103 | 0 ms
104 |
105 |
106 |
107 | true
108 | true
109 |
110 |
111 |
112 | true
113 | true
114 | 0 ms
115 |
116 |
117 |
118 | true
119 | true
120 |
121 |
122 |
123 | true
124 |
125 |
126 |
127 | true
128 | beginChunk
129 |
130 |
131 |
132 | true
133 | beginChunk
134 |
135 |
136 |
137 | true
138 | 1 ms
139 |
140 |
141 |
142 | true
143 | 20 ms
144 |
145 |
146 |
147 | true
148 | 0 ms
149 |
150 |
151 |
152 | true
153 | 0 ms
154 |
155 |
156 |
157 | true
158 | 0 ms
159 |
160 |
161 |
162 | true
163 | 0 ms
164 |
165 |
166 |
167 | true
168 | 0 ms
169 |
170 |
171 |
172 | true
173 | 0 ms
174 |
175 |
176 |
177 | true
178 | true
179 |
180 |
181 |
182 | true
183 | 5 s
184 |
185 |
186 |
187 | true
188 | beginChunk
189 |
190 |
191 |
192 | true
193 | beginChunk
194 |
195 |
196 |
197 | true
198 | beginChunk
199 |
200 |
201 |
202 | true
203 | beginChunk
204 |
205 |
206 |
207 | true
208 | beginChunk
209 |
210 |
211 |
212 | true
213 | beginChunk
214 |
215 |
216 |
217 | true
218 | beginChunk
219 |
220 |
221 |
222 | true
223 |
224 |
225 |
226 | true
227 |
228 |
229 |
230 | true
231 |
232 |
233 |
234 | true
235 |
236 |
237 |
238 | true
239 |
240 |
241 |
242 | true
243 |
244 |
245 |
246 | true
247 |
248 |
249 |
250 | true
251 | everyChunk
252 |
253 |
254 |
255 | true
256 | everyChunk
257 |
258 |
259 |
260 | true
261 | beginChunk
262 |
263 |
264 |
265 | true
266 | beginChunk
267 |
268 |
269 |
270 | true
271 | beginChunk
272 |
273 |
274 |
275 | true
276 | beginChunk
277 |
278 |
279 |
280 | true
281 |
282 |
283 |
284 | true
285 |
286 |
287 |
288 | true
289 |
290 |
291 |
292 | true
293 |
294 |
295 |
296 | true
297 |
298 |
299 |
300 | true
301 |
302 |
303 |
304 | true
305 | true
306 |
307 |
308 |
309 | true
310 | true
311 |
312 |
313 |
314 | true
315 |
316 |
317 |
318 | true
319 | 0 ms
320 |
321 |
322 |
323 | true
324 | 0 ms
325 |
326 |
327 |
328 | true
329 | 0 ms
330 |
331 |
332 |
333 | true
334 | 0 ms
335 |
336 |
337 |
338 | true
339 | 0 ms
340 |
341 |
342 |
343 | true
344 | 0 ms
345 |
346 |
347 |
348 | true
349 | 0 ms
350 |
351 |
352 |
353 | true
354 | 0 ms
355 |
356 |
357 |
358 | true
359 | 0 ms
360 |
361 |
362 |
363 | true
364 | 0 ms
365 |
366 |
367 |
368 | true
369 | 0 ms
370 |
371 |
372 |
373 | true
374 |
375 |
376 |
377 | true
378 |
379 |
380 |
381 | true
382 |
383 |
384 |
385 | true
386 |
387 |
388 |
389 | true
390 |
391 |
392 |
393 | true
394 |
395 |
396 |
397 | true
398 |
399 |
400 |
401 | true
402 | 0 ms
403 |
404 |
405 |
406 | true
407 |
408 |
409 |
410 | true
411 |
412 |
413 |
414 | true
415 |
416 |
417 |
418 | true
419 |
420 |
421 |
422 | true
423 |
424 |
425 |
426 | true
427 | true
428 |
429 |
430 |
431 | true
432 |
433 |
434 |
435 | true
436 | everyChunk
437 |
438 |
439 |
440 | true
441 |
442 |
443 |
444 | true
445 | everyChunk
446 |
447 |
448 |
449 | true
450 |
451 |
452 |
453 | true
454 | true
455 | 0 ns
456 |
457 |
458 |
459 | true
460 | beginChunk
461 |
462 |
463 |
464 | true
465 | 1000 ms
466 |
467 |
468 |
469 | true
470 | 100 ms
471 |
472 |
473 |
474 | true
475 | 0 s
476 |
477 |
478 |
479 | true
480 |
481 |
482 |
483 | true
484 |
485 |
486 |
487 | true
488 | beginChunk
489 |
490 |
491 |
492 | true
493 | everyChunk
494 |
495 |
496 |
497 | true
498 | 100 ms
499 |
500 |
501 |
502 | true
503 | beginChunk
504 |
505 |
506 |
507 | true
508 | everyChunk
509 |
510 |
511 |
512 | true
513 |
514 |
515 |
516 | true
517 | beginChunk
518 |
519 |
520 |
521 | true
522 | beginChunk
523 |
524 |
525 |
526 | true
527 | beginChunk
528 |
529 |
530 |
531 | true
532 | 10 s
533 |
534 |
535 |
536 | true
537 | 1000 ms
538 |
539 |
540 |
541 | true
542 | 10 s
543 |
544 |
545 |
546 | true
547 | beginChunk
548 |
549 |
550 |
551 | true
552 | endChunk
553 |
554 |
555 |
556 | true
557 | 5 s
558 |
559 |
560 |
561 | true
562 | beginChunk
563 |
564 |
565 |
566 | true
567 | everyChunk
568 |
569 |
570 |
571 | true
572 | true
573 |
574 |
575 |
576 | true
577 | true
578 |
579 |
580 |
581 | true
582 | everyChunk
583 |
584 |
585 |
586 | true
587 | endChunk
588 |
589 |
590 |
591 | true
592 | endChunk
593 |
594 |
595 |
596 | true
597 | true
598 | 0 s
599 |
600 |
601 |
602 | true
603 | true
604 | 0 s
605 |
606 |
607 |
608 | true
609 | true
610 | 0 s
611 |
612 |
613 |
614 | true
615 | true
616 | 10 ms
617 |
618 |
619 |
620 | true
621 | true
622 | 10 ms
623 |
624 |
625 |
626 | true
627 | true
628 |
629 |
630 |
631 | true
632 | true
633 |
634 |
635 |
636 | true
637 | true
638 |
639 |
640 |
641 | true
642 | true
643 |
644 |
645 |
646 | true
647 | true
648 |
649 |
650 |
651 | true
652 | true
653 |
654 |
655 |
656 | true
657 | 1000 ms
658 |
659 |
660 |
661 | true
662 |
663 |
664 |
665 | true
666 |
667 |
668 |
669 | true
670 | 0 ns
671 |
672 |
673 |
674 | true
675 | 0 ns
676 |
677 |
678 |
679 | true
680 | 0 ns
681 |
682 |
683 |
684 | true
685 | 0 ns
686 |
687 |
688 |
689 | true
690 | 0 ns
691 |
692 |
693 |
694 | true
695 | 0 ns
696 |
697 |
698 |
699 | true
700 |
701 |
702 |
703 | true
704 |
705 |
706 |
707 | true
708 | 10 ms
709 |
710 |
711 |
712 | true
713 | 0 ms
714 |
715 |
716 |
717 | 0 ms
718 | true
719 |
720 |
721 |
722 | true
723 | 0 ms
724 |
725 |
726 |
727 | true
728 | true
729 |
730 |
731 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
789 |
790 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
808 |
809 |
810 |
811 |
812 |
813 |
814 |
815 |
816 |
817 |
818 |
819 |
820 |
821 |
822 |
823 |
824 |
825 |
826 |
827 |
828 |
829 |
830 |
831 |
832 |
833 |
834 |
835 |
836 |
837 |
838 |
839 |
840 |
841 |
842 |
843 |
844 |
845 |
846 |
847 |
848 |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 |
857 |
858 |
859 |
860 |
861 |
862 |
863 |
864 |
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
876 |
877 |
878 |
879 |
880 |
881 |
882 |
883 |
884 |
885 |
886 |
887 |
888 |
889 |
890 |
891 |
892 |
893 |
894 |
895 |
896 |
897 |
898 |
899 |
900 |
901 |
902 |
903 |
904 |
905 |
906 |
907 | 10 ms
908 |
909 | 10 ms
910 |
911 | 10 ms
912 |
913 | false
914 |
915 |
916 |
917 |
918 |
--------------------------------------------------------------------------------