open-telemetry/opentelemetry-ebpf-profiler
FreeThe production-scale datacenter profiler (C/C++, Go, Rust, Python, Java, NodeJS, .NET, PHP, Ruby, Perl, ...)
About open-telemetry/opentelemetry-ebpf-profiler
OpenTelemetry eBPF Profiler is a whole-system, cross-language profiler for Linux that leverages eBPF to capture stack traces with extremely low overhead (targeting 1% CPU and 250MB memory). It supports native C/C++, Rust, Zig, Go, and a broad set of high-level languages (Hotspot JVM, Python, Ruby, PHP, Node.JS, V8, Perl, Erlang, .NET) without requiring debug symbols or frame pointers on the host. The agent is 100% non-intrusive, requiring no agents or libraries to be loaded into target processes, and no reconfiguration or restarts. It implements the Alpha OpenTelemetry Profiles signal, supports ARM64, native inline frames, and mixed stacktraces that span kernel space through system libraries into interpreted runtimes.
Key Features
Pros & Cons
- Extremely low CPU and memory overhead (targeting <1% CPU and <250MB RAM)
- Supports a wide range of high-level languages and native code
- 100% non-intrusive – no agents, libraries, or restarts needed
- Works without debug symbols or frame pointers on the host
- Full ARM64 support across all unwinders
- Captures mixed stacktraces spanning kernel, system libraries, and runtimes
- Open source and part of the OpenTelemetry ecosystem
- Linux-only (requires eBPF and specific kernel versions: minimum 5.4 or 5.10+)
- Requires root or privileged access to load eBPF programs
- Not suitable for non-Linux environments
- May require kernel configuration to enable eBPF features
- Primarily designed for datacenter scale; might be overkill for simple debugging