The purpose of this change is to reduce the size of JFR recordings when the OldObjectSample event is enabled.
## Problem JFR recordings size blows up when the `OldObjectSample` is enabled. The memory allocation events are known to be very high traffic and will cause a lot of data, just the sheer number of events produced, and if stacktraces are added to this, the associated metadata can be huge as well. Sampled object are stored in a priority queue and their associated stack traces stored in `JFRStackTraceRepository`. When sample candidates are removed from the priority queue, their stacktraces remain in the repository, which will be later written at chunk rotation even if the sample has been removed. ## Implementation This PR adds a `JFRStackTraceRepository` dedicated to store stack traces for the `OldObjectSample` event. At chunk rotation, every sample stack trace is looked up in this repository and is serialized. Other stack traces are simply removed. ## Benchmarks On an AWS c5.metal instance (96 cores, 192 Gib), running SPECjvm2008 with default profile.jfc configuration with OldObjectSample event enabled gives - a recording size 2.78Mb with the PR fix - a recording size 20.73Mb with the PR fix ------------- Commit messages: - Add ObjectSamplerStackTraceRepository - Add objecetSampleCheckpoint.cpp StackTraceChunkWriter - Instanciate leak profiler StackTraceRepository - Add leak profiler StackTraceRepository - Un-statify jfrStackTraceRepository Changes: https://git.openjdk.java.net/jdk/pull/2644/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=2644&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8258414 Stats: 189 lines in 16 files changed: 163 ins; 1 del; 25 mod Patch: https://git.openjdk.java.net/jdk/pull/2644.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/2644/head:pull/2644 PR: https://git.openjdk.java.net/jdk/pull/2644 |
On Fri, 19 Feb 2021 14:21:06 GMT, Florian David <[hidden email]> wrote:
> The purpose of this change is to reduce the size of JFR recordings when the OldObjectSample event is enabled. > > ## Problem > > JFR recordings size blows up when the `OldObjectSample` is enabled. The memory allocation events are known to be very high traffic and will cause a lot of data, just the sheer number of events produced, and if stacktraces are added to this, the associated metadata can be huge as well. Sampled object are stored in a priority queue and their associated stack traces stored in `JFRStackTraceRepository`. When sample candidates are removed from the priority queue, their stacktraces remain in the repository, which will be later written at chunk rotation even if the sample has been removed. > > ## Implementation > > This PR adds a `JFRStackTraceRepository` dedicated to store stack traces for the `OldObjectSample` event. At chunk rotation, every sample stack trace is looked up in this repository and is serialized. Other stack traces are simply removed. > > ## Benchmarks > On an AWS c5.metal instance (96 cores, 192 Gib), running SPECjvm2008 with default profile.jfc configuration with OldObjectSample event enabled gives > - a recording size 2.78Mb with the PR fix > - a recording size 20.73Mb with the PR fix This pull request has been closed without being integrated. ------------- PR: https://git.openjdk.java.net/jdk/pull/2644 |
Free forum by Nabble | Edit this page |