Skip to content

Parca Agent - Always-On eBPF Continuous Profiling Cheatsheet

Parca Agent - Always-On eBPF Continuous Profiling Cheatsheet

Parca Agent is an eBPF-based continuous profiler. Rather than attaching a profiler when you suspect a problem, it samples stack traces from every process on a node, all the time, at roughly 1% overhead and with zero application instrumentation. That inverts the usual workflow: instead of reproducing an incident under a profiler, you look up what was actually running during the incident window. It attributes CPU (and memory, for supported runtimes) down to the line number and ships profiles to a Parca server or any Prometheus-compatible profile store.

Requirements

  • Linux kernel with eBPF/BTF (5.4+, newer preferred)
  • Root / privileged container
  • Parca server (or compatible store) to receive profiles

Installation

MethodCommand
Binarydownload from GitHub Releases
Dockerdocker run --privileged ghcr.io/parca-dev/parca-agent:latest
KubernetesDeploy as a DaemonSet (manifests provided)
Serverrun parca separately to store/query profiles
Verifyparca-agent --version

Running

sudo parca-agent \
  --node=my-node-1 \
  --remote-store-address=parca.internal:7070 \
  --remote-store-insecure
FlagPurpose
--nodeNode label attached to profiles
--remote-store-addressWhere to ship profiles
--http-addressLocal UI/metrics endpoint (:7071)
--profiling-durationSampling window (default 10s)
--log-levelVerbosity

Kubernetes DaemonSet

AspectNote
DeploymentOne agent per node
Privilegesprivileged: true, hostPID
DiscoveryAutomatically labels by pod/container/namespace
Overhead~1% CPU typical
StorageProfiles go to the Parca server, not the node

Language Support

RuntimeStack unwinding
C/C++/Rust/GoNative (DWARF or frame pointers)
JavaJIT symbol resolution
Python / RubyInterpreter-aware unwinding
Node.jsSupported via runtime unwinding
Any binary with symbolsBest results when not stripped

Mixed-language stacks resolve in one profile, which is exactly what you need for a polyglot service.

Querying Profiles

Parca’s UI (and API) lets you slice profiles like metrics:

Query dimensionExample
Time rangeThe 5 minutes around an incident
Labelsnamespace="prod", pod=~"api-.*"
ComparisonDiff two time ranges (before/after a deploy)
FunctionFilter to a symbol
# Conceptual: CPU profile for one service during a spike
cpu_samples{namespace="prod", container="api"}  [14:05 → 14:10]

The Killer Feature: Comparison

UseHow
Regression huntDiff profiles before vs after a release
Incident analysisDiff incident window vs baseline
Optimization proofShow the hot function shrank

Continuous profiling makes this possible because the “before” profile already exists — you did not need to predict you would want it.

AspectParca AgentperfPyroscopeasync-profiler
ModelAlways-on, fleet-wideOn-demand, per-runAlways-onOn-demand, JVM
InstrumentationNone (eBPF)NoneAgent/SDK optionsJVM agent
Multi-languageYesYes (native)YesJVM only
Best forProduction continuous profilingDeep local analysisContinuous profilingJVM accuracy

Same category as Pyroscope; use perf or async-profiler when you need deep one-off analysis.

Resources