Sonakshi

From “It’s Slow” to Root Cause: Diagnosing Performance Bottlenecks in a High-Throughput Microservice

Submitted Oct 9, 2026

From “It’s Slow” to Root Cause: Diagnosing Performance Bottlenecks in a High-Throughput Microservice

One-line summary

A production case study of diagnosing a high-throughput Scala microservice that struggled under large, realistic workloads—and how profiling, runtime diagnostics, and workload analysis helped us identify the actual bottlenecks and improve throughput and stability.


What problem are you addressing?

Performance problems in distributed systems rarely have a single obvious cause.

In our case, a production microservice was processing a high volume of events with increasingly large payloads. As workload complexity increased, we started seeing performance and scalability issues. The initial symptoms could easily have led us toward the usual solutions: add more resources, increase concurrency, tune the JVM, or change batch sizes.

But those approaches only addressed symptoms.

The real challenge was figuring out where the system was actually spending its CPU, memory, time, and concurrency budget.

This talk walks through the investigation—from the initial production symptoms to profiling, identifying unexpected bottlenecks, testing hypotheses, evaluating failed approaches, and implementing targeted changes.

The goal is to show a practical, repeatable approach to performance engineering in production systems rather than a collection of JVM tuning tips.


Who is the intended audience?

  • SRE
  • Platform Engineering
  • Backend / Systems Engineers
  • DevOps / Infrastructure Engineers
  • Developers working on distributed systems
  • Engineering leaders responsible for reliability and scalability

Level

Intermediate / Advanced


Practical takeaways

Attendees will learn:

  1. How to systematically investigate a performance problem across the application, JVM, concurrency, I/O, and infrastructure layers.
  2. How to use profiling and production measurements to distinguish the actual bottleneck from the symptoms and validate whether an optimization really worked.

What will you share?

The session will cover a real production investigation, including:

  • The architecture and workload that exposed the scalability problem
  • How large payloads and workload complexity changed system behavior
  • Initial symptoms and hypotheses
  • What we measured before making changes
  • Using Async Profiler to identify CPU and allocation hotspots
  • Thread and heap dump analysis
  • Understanding GC behavior and JVM pressure
  • Identifying application-level and I/O bottlenecks
  • How concurrency and batching affected throughput
  • Approaches that didn’t solve the underlying problem
  • The changes that ultimately improved throughput and stability
  • Before-and-after performance measurements

The focus will be on the engineering investigation and decision-making process, not just the final solution.


What is your experience with this problem?

  • Production system
  • Real performance investigation
  • Internal engineering project
  • Hard-earned engineering lessons
  • Production-scale performance optimization

This work came from diagnosing and optimizing a production-grade Scala microservice handling high-throughput workloads and large payloads.


What approaches failed, disappointed, or created unexpected problems?

Our first instinct was to look at resource allocation, concurrency, batching, and JVM behavior independently.

Some changes improved individual metrics but didn’t materially solve the throughput problem. More importantly, optimizing one stage of the pipeline often exposed another bottleneck downstream.

This taught us that performance tuning in a distributed pipeline is rarely about finding one slow function.

We had to move toward an end-to-end approach:

Workload → ingestion → processing → concurrency → JVM → I/O → persistence

and continuously validate each hypothesis with measurements.


What will you do differently today?

We would start profiling and establishing a performance baseline much earlier.

Instead of asking:

“What should we tune?”

we would ask:

“Where is the system spending its CPU, memory, time, and concurrency budget?”

We would reproduce realistic workloads, establish measurable baselines, profile under load, form hypotheses from the evidence, make one targeted change at a time, and benchmark again.

The process becomes:

Measure → Hypothesize → Profile → Change → Benchmark → Validate


What trade-offs did you consider?

We weren’t optimizing for throughput alone.

We considered:

  • Throughput vs. latency
  • CPU utilization vs. processing capacity
  • Memory usage vs. GC pressure
  • Concurrency vs. contention
  • Batch size vs. responsiveness
  • Payload size vs. processing cost
  • Application optimization vs. infrastructure scaling
  • Short-term tuning vs. architectural changes

The objective was predictable throughput and system stability under realistic production workloads, rather than maximizing a single benchmark number.


How can this help other practitioners?

The investigation provides a practical framework that can be applied to other high-throughput services.

Attendees can use it to:

  • Identify whether a bottleneck is CPU, memory, GC, I/O, concurrency, or application logic
  • Use profiling data to validate optimization hypotheses
  • Avoid premature JVM or infrastructure tuning
  • Understand how workload characteristics expose hidden scalability limits
  • Build meaningful before/after performance measurements
  • Decide whether to optimize code, architecture, or infrastructure
  • Debug production performance issues systematically rather than through trial and error

The broader lesson is that performance engineering is an investigation discipline, not a bag of tuning parameters.


Current state

Production experience

The session is based on a real production engineering investigation and subsequent performance improvements to a high-throughput microservice.


Tags

#rootconf #performanceengineering #scalability #sre #observability #distributedSystems #microservices #jvm #scala #profiling #productionengineering #highthroughput #devops #infrastructure #casestudy

Comments

{{ gettext('Login to leave a comment') }}

{{ gettext('Post a comment…') }}
{{ gettext('New comment') }}
{{ formTitle }}

{{ errorMsg }}

{{ gettext('No comments posted yet') }}

Hosted by

We care about site reliability, cloud costs, security and data privacy