RSSAmplifier

Blog

With Enthusiasm

Mostly Java/JVM stuff. Focused on serviceability, observability and performance. All opinions are my own and I am not selling any of them.

/RSS feed ↗10 posts

Latest posts

Connecting the Dots in a JFR Recording

One Recording, Many Silos The Hard Way decorateBy A Recording to Play With Five Queries 1. Where does the CPU actually go? 2. Which endpoint is driving GC? 3. Wall-clock profile by trace operation 4. How much CPU is spent on failing traces? 5. Heap allocations by wall-clock thread state Why This Matters One Recording, Many Silos A JFR recording from a busy service is absurdly rich. CPU samples,…

When Did That Hotspot Happen?

The Flamegraph Lie What You Actually Want stackprofile Reading the Output Bursty vs Steady: A Concrete Difference Flamegraph vs stackprofile Prior Art and How stackprofile Differs For AI Agents Too Where It Shines Try It The Flamegraph Lie Flamegraphs are the standard answer to “where is the CPU going?” You get a beautiful tree of call stacks, widths proportional to sample counts, and you can…

Let the AI Debug It: JFR Analysis Over MCP

The Pitch You Didn’t Ask For What MCP Actually Is (30-Second Version) JBang: Zero-Install Java Distribution Two Transports: STDIO and HTTP STDIO Mode HTTP/SSE Mode Wiring It to Claude Claude Code Claude Desktop Building from Source Why JFR Deserves Better Tooling The Toolbox Core Tools: Opening, Querying, Learning Analysis Tools: Methodologies, Not Just Queries What a Conversation Looks Like The…

JFR Shell Gets a TUI: Because Scrolling Is for Mortals

The Problem with Scrolling Getting In The Layout Tabs Search and Filter Sorting The Detail Pane Event Browser Constant Pool Browser Metadata Session Switching Completion Export History Cell Picker The Keyboard Cheat Sheet Under the Hood Try It The Problem with Scrolling If you have used jfr-shell for any non-trivial analysis, you know the drill. You run a query, get a wall of text, scroll up to…

Debugging the OTLP Profile Attribute Indices Mystery

This is the story of how a handful of integers managed to gaslight three separate tools, a Docker container, one human, and a very unimpressed cat on a radiator, while rain hammered the windows and the logs scrolled by like sleet.

Github Actions Permission Nightmare

The GitHub Actions Permission Nightmare: A Journey Through Documentation Hell

A different shade of context

Oh, not again … The plot twist The idea Juicing the idea The proposal What’s next Gnarly details Design Contextual annotation Context driven behaviour Conditionally emit events Record only activated context Controlling the behaviour via settings Implementation @Contextual annotation Activated context Oh, not again … Yes, you remember correctly. I did write a quite lengthy series of blog posts…

Dude, where’s my memory?!

It starts with a customer report Reproducer The investigation Native Memory Tracking ASAN Valgrind DDPROF And they lived happily ever after Conclusion It starts with a customer report Recently, I received a report from a customer that they noticed RSS slowly growing over time in their application when they enable Datadog Java Profiler . There is no unexpected growth in heap usage, meaning that it…

Seeing In Context: A journey to contextualized JFR profiles (part 3)

Integrating with existing tracers Searching for integration points Exposing ContextAccess A note about picking the annotation type Supporting primitive types for context values DDSpanContext example Modify DDSpanContext class Obtain and use ContextAccess instance Wrap up Integrating with existing tracers I’ve already shown the basic concepts of profiling context and talked about how the proposed…

Mysterious jmethodID

What is jmethodID and why do I care jmethodID and profilers Investigation What is that assert doing Hygiene is important Asserts and guarantees Down the rabbit hole Let’s fix it! What is the real cause? There is still more to it Diagram time Next steps What is jmethodID and why do I care Let me start with a short introduction to the concept of jmethodID . When working in the realm of JNI (Java…