# flamegraph

Published articles for flamegraph.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Continuous profiling at Mercado Libre: Turning flamegraphs into fixes

DevFeed: [Continuous profiling at Mercado Libre: Turning flamegraphs into fixes](<https://devfeed.tech/articles/continuous-profiling-at-mercado-libre-turning-flamegraphs-into-fixes-22550.md>)

Original publisher: [Read original article](<https://medium.com/mercadolibre-tech/continuous-profiling-at-mercado-libre-turning-flamegraphs-into-fixes-2ee371c32bfd?source=rss----5011f85401f0---4>)

Author: Elton Hoffmann

Published: 2026-03-11T01:27:33Z

Content type: article

Language: en

Sources: [Mercado Libre Tech](<https://devfeed.tech/sources/mercado-libre-tech.md>)

Topics: [observability](<https://devfeed.tech/topics/observability.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>), [Microservices](<https://devfeed.tech/topics/microservices.md>), [Latency](<https://devfeed.tech/topics/latency.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [article](<https://devfeed.tech/tags/article.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [end-user-experience](<https://devfeed.tech/tags/end-user-experience.md>), [flamegraph](<https://devfeed.tech/tags/flamegraph.md>), [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [latency](<https://devfeed.tech/tags/latency.md>), [memory](<https://devfeed.tech/tags/memory.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [observability](<https://devfeed.tech/tags/observability.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-engineering](<https://devfeed.tech/tags/performance-engineering.md>), [platform-engineering](<https://devfeed.tech/tags/platform-engineering.md>), [profiling](<https://devfeed.tech/tags/profiling.md>), [uptime](<https://devfeed.tech/tags/uptime.md>)

### AI overview

Mercado Libre describes building a continuous profiling platform for about 35,000 microservices. The platform treats profiling as an observability signal alongside metrics, logs, and traces, with the goal of helping teams detect performance issues and automate fixes for certain issue classes.

### Source excerpt

We continue our series on Performance Engineering at Mercado Libre. In previous articles, we discussed how we crafted an observability culture across the company, how performance relates to other observability signals, and how the Performance Engineering team partners with Business Units to enhance platform efficiency. Today, we'll show how we built a continuous profiling platform for 35,000 microservices and how we started turning profiles into automated fixes. Context Our goal in the Performance Engineering team is threefold: to ensure uptime; to improve the end-user experience by reducing latency; to reduce computing costs. As a cross-functional team, we usually work with application owners to achieve these goals. In our two years of existence, our joint efforts have taken us through countless incidents and bottlenecks. Each problem is unique, but over time, we've seen some common patterns: high memory allocation, lack of garbage collection (GC) tuning, thread pool saturation, blocking I/O, and heavy workloads processing repeated tasks. Image 1: Typical flamegraph of high CPU usage replacing string patterns Trained eyes spot these signals quickly. But two eyeballs won't scale to thousands of services. Mercado Libre is an ever-growing company, with about 35,000 microservices, 30,000 deploys per day, and more than 16,000 people in IT roles. What are the odds that a performance issue found on one microservice doesn't exist in another? Or at least a similar issue? We often encounter systems with issues that are easy to fix but hard to detect (unless you have the right tools). It became clear we had to scale. We needed a platform-level solution that would let teams self-diagnose and self-tune. By the end of this article, you'll see how we built that and how we now automate both detection and fixes for certain classes of issues. Continuous profiling After setting our goal to improve performance tooling, we developed our own continuous profiling solution. Why profiling,

## AI Flame Graphs

DevFeed: [AI Flame Graphs](<https://devfeed.tech/articles/ai-flame-graphs-13602.md>)

Original publisher: [Read original article](<http://www.brendangregg.com/blog//2024-10-29/ai-flame-graphs.html>)

Published: 2024-10-28T13:00:00Z

Content type: article

Language: en

Sources: [Brendan Gregg's Blog](<https://devfeed.tech/sources/brendan-gregg-s-blog.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [GPU](<https://devfeed.tech/topics/gpu.md>), [intel](<https://devfeed.tech/topics/intel.md>), [telemetry](<https://devfeed.tech/topics/telemetry.md>), [Instrumentation](<https://devfeed.tech/topics/instrumentation.md>), [eBPF](<https://devfeed.tech/topics/ebpf.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [blog](<https://devfeed.tech/tags/blog.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [ebpf](<https://devfeed.tech/tags/ebpf.md>), [flame-graph](<https://devfeed.tech/tags/flame-graph.md>), [flamegraph](<https://devfeed.tech/tags/flamegraph.md>), [gpu](<https://devfeed.tech/tags/gpu.md>), [instrumentation](<https://devfeed.tech/tags/instrumentation.md>), [intel](<https://devfeed.tech/tags/intel.md>), [performance](<https://devfeed.tech/tags/performance.md>), [profiling](<https://devfeed.tech/tags/profiling.md>), [svg](<https://devfeed.tech/tags/svg.md>), [visualization](<https://devfeed.tech/tags/visualization.md>)

### AI overview

The article presents AI Flame Graphs, an Intel analyzer that visualizes AI accelerator or GPU instruction activity together with the software stack. It explains how the profiler uses Intel EU stall profiling and eBPF instrumentation to identify costly code paths, illustrating optimization differences in a SYCL matrix-multiply benchmark.

### Source excerpt

Imagine halving the resource costs of AI and what that could mean for the planet and the industry -- based on extreme estimates such savings could reduce the total US power usage by over 10% by 20301. At Intel we've been creating a new analyzer tool to help reduce AI costs called AI Flame Graphs: a visualization that shows an AI accelerator or GPU hardware profile along with the full software stack, based on my CPU flame graphs. Our first version is available to customers in the Intel Tiber AI Cloud as a preview for the Intel Data Center GPU Max Series (previously called Ponte Vecchio). Here is an example: Simple example: SYCL matrix multiply microbenchmark (Click for interactive SVG.) The green frames are the actual instructions running on the AI or GPU accelerator, aqua shows the source code for these functions, and red (C), yellow (C++), and orange (kernel) show the CPU code paths that initiated these AI/GPU programs. The gray "-" frames just help highlight the boundary between CPU and AI/GPU code. The x-axis is proportional to cost, so you look for the widest things and find ways to reduce them. Layers This flame graph shows a simple program for SYCL (a high-level C++ language for accelerators) that tests three implementations of matrix multiply, running them with the same input workload. The flame graph is dominated by the slowest implementation, multiply_basic(), which doesn't use any optimizations and consumes at 72% of stall samples and is shown as the widest tower. On the right are two thin towers for multiply_local_access() at 21% which replaces the accessor with a local variable, and multiply_local_access_and_tiling() at 6% which also adds matrix tiling. The towers are getting smaller as optimizations are added. This flame graph profiler is a prototype based on Intel EU stall profiling for hardware profiling and eBPF for software instrumentation. It's designed to be easy and low-overhead, just like a CPU profiler. You should be able to generate a flame gr

## Using JFR and JMC to root cause a performance bug in JMC caused by a typo in JFR

DevFeed: [Using JFR and JMC to root cause a performance bug in JMC caused by a typo in JFR](<https://devfeed.tech/articles/using-jfr-and-jmc-to-root-cause-a-performance-bug-in-jmc-caused-by-a-typo-in-jfr-25638.md>)

Original publisher: [Read original article](<https://richardstartin.github.io/posts/jmc-hanging>)

Author: Richard Startin's Blog

Published: 2022-12-18T00:00:00Z

Content type: tutorial

Language: en

Sources: [Richard Startin's Blog](<https://devfeed.tech/sources/richard-startin-s-blog.md>)

Topics: [bug](<https://devfeed.tech/topics/bug.md>), [cpu](<https://devfeed.tech/topics/cpu.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [flamegraph](<https://devfeed.tech/tags/flamegraph.md>), [java](<https://devfeed.tech/tags/java.md>), [performance](<https://devfeed.tech/tags/performance.md>), [profiling](<https://devfeed.tech/tags/profiling.md>)

### AI overview

The article explains how overlapping events in JFR files can trigger quadratic scaling in JMC's parser, causing profiles to take a long time to load. It demonstrates profiling JMC with JFR and cautions that CPU flamegraphs alone may not distinguish slow methods from methods called too often.

### Source excerpt

When you open a profile in JMC, it normally takes a few seconds, but there are some profiles that JMC struggles to load. This happens when a profile contains events which violate an assumption made in JMC's parser: events on the same thread are almost always disjoint in their durations. When JMC parses a JFR file, it splits the events of the same type emitted on the same thread into lanes so that events within a lane are disjoint. JMC can handle overlapping events, but assumes this essentially never happens, and exhibits quadratic scaling when events overlap.

## Rust Performance 101 in 5 Minutes

DevFeed: [Rust Performance 101 in 5 Minutes](<https://devfeed.tech/articles/rust-performance-101-in-5-minutes-35461.md>)

Original publisher: [Read original article](<https://darkcoding.net/software/rust-performance-101-in-5-minutes/>)

Author: Graham King

Published: 2021-06-16T00:00:00Z

Content type: tutorial

Language: en

Sources: [Graham King](<https://devfeed.tech/sources/graham-king.md>)

Topics: [Rust](<https://devfeed.tech/topics/rust.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [benchmark](<https://devfeed.tech/tags/benchmark.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [flamegraph](<https://devfeed.tech/tags/flamegraph.md>), [hashmap](<https://devfeed.tech/tags/hashmap.md>), [json-parsing](<https://devfeed.tech/tags/json-parsing.md>), [linux](<https://devfeed.tech/tags/linux.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance](<https://devfeed.tech/tags/performance.md>), [rust](<https://devfeed.tech/tags/rust.md>)

### AI overview

A concise guide to diagnosing and improving CPU-bound Rust programs on Linux. It recommends repeatable benchmarks, release builds with link-time optimization, compiling for the target CPU, flamegraphs, data-structure changes, and faster libraries.

### Source excerpt

Is your Rust program CPU bound? Here are the very first things you can do on Linux.

## Tracing Gradle task execution

DevFeed: [Tracing Gradle task execution](<https://devfeed.tech/articles/tracing-gradle-task-execution-20979.md>)

Original publisher: [Read original article](<https://jakewharton.com/tracing-gradle-task-execution/>)

Published: 2018-08-01T00:00:00Z

Content type: article

Language: en

Sources: [Jake Wharton](<https://devfeed.tech/sources/jake-wharton.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [tracing](<https://devfeed.tech/topics/tracing.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [build](<https://devfeed.tech/tags/build.md>), [ci](<https://devfeed.tech/tags/ci.md>), [concurrent](<https://devfeed.tech/tags/concurrent.md>), [flamegraph](<https://devfeed.tech/tags/flamegraph.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-analysis](<https://devfeed.tech/tags/performance-analysis.md>), [profile](<https://devfeed.tech/tags/profile.md>), [tracing](<https://devfeed.tech/tags/tracing.md>)

### AI overview

This article explains ways to trace Gradle task execution and analyze build performance. It compares Gradle's built-in profiling and scanning mechanisms with local approaches using Gradle profiler integrations, Java Flight Recorder, Java Mission Control, command-line conversion, and flamegraphs, while noting limitations for CI builds and daemon-backed tasks.

### Source excerpt

Gradle provides two built-in mechanisms for tracing your build: --profile and --scan. The former produces a simple HTML report of task execution times. You can get a rough idea of where time was spent but are unlikely to glean any real insights. The latter sends a detailed report to Gradle's servers (or to a Gradle Enterprise installation) with much more granular information. Task details are rendered on a concurrent timeline corresponding to their execution. For CI builds, I tend to want something more granular than --profile but I don't like the idea of sending details of every build to Gradle with --scan. It seems entirely needless considering their plugin has all of that information locally but chooses to render it remotely. The Gradle profiler project started a few years ago as a way to deterministically measure build speeds. By creating scenarios such as an ABI-breaking change, ABI-compatible change, Android resource change, etc., the tool can run these scenarios multiple times to first warm up the JVM and then to produce an accurate picture of what gets executed. It offers integrations and outputs for use with popular JVM-based performance analysis tools such as YourKit and Java Flight Recorder. For CI builds, executing through the Gradle profiler would be an annoying abstraction to use. We can instead use it for inspiration and run its integrations on individual builds. Java Flight Recorder can be used on individual Gradle builds with the jcmd binary in the JDK and with flags to java specified on the org.gradle.jvmargs in your gradle.properties. There are even Gradle plugins which offer to start and stop the recording automatically. We can then open the resulting .jfr file in Java Mission Control or use a command-line tool to convert it into a flamegraph. The flamegraph can show where time is being spent inside of tasks over the course of the build. The stacks aren't correlated to a task, though, so it's important to remember that you're looking at the large