🎉 DevOps Interview Prep Bundle is live — 1000+ Q&A across 20 topicsGet it →
All Articles

Pyroscope vs Parca vs Grafana Pyroscope: Which Continuous Profiling Tool in 2026?

Three serious continuous profiling tools, one decision to make. Here's an honest comparison of Pyroscope, Parca, and Grafana Pyroscope — performance, ecosystem, storage, and which one your team should actually use.

DevOpsBoysJun 13, 20266 min read
Share:Tweet

Continuous profiling has gone from "niche performance engineering tool" to "fourth pillar of observability" in the last two years. The question is no longer whether to do continuous profiling — it's which tool to use.

Three options have emerged as serious contenders: the original Pyroscope, Parca (from the folks behind Prometheus/Thanos), and Grafana Pyroscope (what happens when Grafana Labs acquires Pyroscope). Let me save you the weeks of evaluation I went through.

Quick Context: What These Tools Actually Do

All three tools:

  1. Continuously sample profiling data from your running applications
  2. Store that data efficiently over time (hours, days, weeks)
  3. Provide a UI to explore and compare profiles across time
  4. Show flame graphs to identify hot code paths

The differences are in: how they collect data, how they store it, what languages they support, and how well they integrate with the rest of your observability stack.


Pyroscope (Original, Pre-Grafana Acquisition)

Pyroscope was the open source project started by Dmitry Fain in 2021. It pioneered the "continuous profiling" category with a clean UI, good language support, and a simple pull/push model.

Architecture:

  • Single binary (simple to deploy)
  • Built-in storage (uses its own disk-based format)
  • Agent-based collection OR SDK integration

Language support:

  • Go ✓ (excellent, low overhead)
  • Python ✓ (good)
  • Ruby ✓
  • Java ✓ (uses async-profiler)
  • Node.js ✓
  • .NET ✓
  • Rust ✓ (via eBPF agent)

What it does well:

  • Dead simple setup — single binary, point your apps at it, done
  • Best-in-class UI for flame graph exploration
  • Tag-based filtering — query profiles by env, version, service, any label
  • Diff view — compare "before deploy" vs "after deploy" profiles side by side
  • Good SDK documentation

Limitations:

  • Storage doesn't scale horizontally — you need to provision more disk, not more replicas
  • No distributed query layer — you're limited to what one server can store
  • Community support has fragmented since Grafana acquisition
yaml
# Simple Pyroscope deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pyroscope
spec:
  replicas: 1  # Single replica only
  template:
    spec:
      containers:
      - name: pyroscope
        image: pyroscope/pyroscope:latest
        args: ["server"]
        ports:
        - containerPort: 4040
        volumeMounts:
        - name: data
          mountPath: /var/lib/pyroscope
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: pyroscope-data

Bottom line: Original Pyroscope is excellent for teams up to ~50 services. Beyond that, the storage limitations become real constraints.


Parca

Parca was built by Polar Signals (the company behind it includes several Prometheus and Thanos maintainers). It takes a fundamentally different approach: instead of a custom storage format, it uses the Linux eBPF profiler to collect profiles from any process (no SDK required) and stores data in Apache Parquet via object storage.

Architecture:

  • Two components: Parca Agent (eBPF-based collector) + Parca Server (storage + UI)
  • Object storage backend (S3, GCS) — horizontally scalable
  • No application SDK required — eBPF profiles all processes automatically

Language support:

  • Everything with debug symbols (eBPF-based) — Go, C/C++, Rust
  • Java (via JVM profiler agent)
  • Python (via py-spy integration)
  • Less comprehensive than Pyroscope for dynamic language support

What it does well:

  • Zero application code changes — eBPF agent profiles everything automatically
  • Truly scalable storage — S3 backend, no disk limitations
  • Multi-cluster support — designed to aggregate profiles from multiple clusters
  • Strong ties to the Prometheus ecosystem and OpenTelemetry
  • Parca Agent is a DaemonSet — runs on every node, profiles everything
yaml
# Parca Agent as DaemonSet - profiles everything without SDK
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: parca-agent
spec:
  template:
    spec:
      tolerations:
      - operator: Exists  # Run on all nodes including control plane
      hostPID: true       # Required for eBPF profiling
      containers:
      - name: parca-agent
        image: ghcr.io/parca-dev/parca-agent:latest
        args:
        - /bin/parca-agent
        - --node=$(NODE_NAME)
        - --remote-store-address=parca.monitoring:7070
        - --remote-store-insecure
        securityContext:
          privileged: true  # Required for eBPF
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName

Limitations:

  • eBPF requires Linux kernel 4.18+ with BTF support — not all clusters qualify
  • Python and JVM profiling is less detailed than SDK-based approaches
  • UI is less mature than Pyroscope's
  • Smaller community

Bottom line: Parca is the right choice when you want zero application code changes and have a large number of services to profile. The eBPF approach is elegant — you deploy one DaemonSet and everything gets profiled.


Grafana Pyroscope

In 2023, Grafana Labs acquired Pyroscope and merged it with their existing profiling work (Phlare). The result is Grafana Pyroscope — a distributed, horizontally scalable profiling system that uses the same microservice architecture as Grafana Mimir (the Thanos-based Prometheus long-term storage).

Architecture:

  • Microservice mode (like Mimir): separate Distributor, Ingester, Querier, Compactor components
  • Object storage backend (S3, GCS, Azure Blob)
  • Horizontally scalable at every layer
  • Also works as a monolith for smaller deployments

Language support:

  • Everything Pyroscope supports (inherited SDK ecosystem)
  • Also supports Parca Agent for eBPF-based collection
  • OpenTelemetry profiling signal (emerging standard)

What it does well:

  • Grafana native — integrates directly into Grafana dashboards alongside metrics, logs, and traces
  • Scalable storage — object storage backend, no disk limitations
  • Exemplars — link traces to profiles (click a slow trace, see the profile from that exact time)
  • Grafana Cloud — fully managed option, zero infrastructure
  • Community and support — Grafana Labs backing means active development and enterprise support
  • Compatible with Pyroscope API — existing Pyroscope clients work unchanged
yaml
# Grafana Pyroscope in monolithic mode (simpler)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pyroscope
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: pyroscope
        image: grafana/pyroscope:latest
        args:
        - -config.file=/etc/pyroscope/config.yaml
        volumeMounts:
        - name: config
          mountPath: /etc/pyroscope
yaml
# config.yaml for S3 backend
storage:
  backend: s3
  s3:
    endpoint: s3.amazonaws.com
    bucket: my-pyroscope-profiles
    region: us-east-1

Limitations:

  • Microservice mode is complex to operate (many components, similar to Mimir)
  • If you're not already in the Grafana ecosystem, the integration benefit is reduced
  • Grafana Cloud is great but adds cost

Bottom line: Grafana Pyroscope is the default choice for teams already using Grafana + Prometheus + Loki + Tempo. The unified observability story (metrics + logs + traces + profiles in one UI) is genuinely compelling.


Head-to-Head Comparison

CriteriaPyroscope (original)ParcaGrafana Pyroscope
Setup complexityLowMediumLow (mono) / High (distributed)
Storage scalingLimited (disk)Excellent (S3)Excellent (S3)
SDK requirementYesNo (eBPF)No (eBPF via agent)
Language supportExcellentGoodExcellent
Grafana integrationManualManualNative
eBPF supportNoYes (native)Yes (via agent)
Multi-clusterNoYesYes
Managed optionNoPolar Signals CloudGrafana Cloud
CommunityFragmentedGrowingLarge (Grafana)

Which One Should You Use?

Use Grafana Pyroscope if:

  • You already use Grafana for metrics/logs/traces
  • You want profiles correlated with your existing dashboards
  • You have fewer than 30 services OR want Grafana Cloud managed
  • You need enterprise support

Use Parca if:

  • You have many services and don't want to instrument all of them
  • Your kernel supports eBPF (verify first)
  • You prioritize zero application code changes
  • You want S3-scale storage without Grafana lock-in

Use original Pyroscope if:

  • You have a small number of services (under 50)
  • You want the simplest possible setup
  • You're already using it and it's working fine — no need to migrate

Use Grafana Cloud Pyroscope if:

  • You want zero infrastructure management
  • You're fine paying per GB ingested
  • You want the full Grafana observability stack managed for you

The right answer for most teams in 2026 is Grafana Pyroscope — either self-hosted monolith if you have the Kubernetes footprint, or Grafana Cloud if you'd rather not manage it. The integration with your existing Grafana dashboards closes the gap between "we have profiling data" and "we actually use it."

Already have Prometheus + Grafana? Here's how to set up the full monitoring stack

🔧

Today I Fixed

Short real fixes from production — posted daily

Browse fixes
Newsletter

Stay ahead of the curve

Get the latest DevOps, Kubernetes, AWS, and AI/ML guides delivered straight to your inbox. No spam — just practical engineering content.

Related Articles

Comments