open-telemetry/opentelemetry-ebpf-profiler logo

open-telemetry/opentelemetry-ebpf-profiler

Free

The production-scale datacenter profiler (C/C++, Go, Rust, Python, Java, NodeJS, .NET, PHP, Ruby, Perl, ...)

FreeFree tier
Type
Open Source

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

Very low CPU and memory overhead (1% CPU and 250MB memory upper limits)
Support for native C/C++ executables without DWARF debug information (using .eh_frame data)
Support for system libraries without frame pointers and debug symbols
Mixed stacktraces from kernel space through system libraries into high-level languages
Support for native code: C/C++, Rust, Zig, Go, etc. (no debug symbols on host required)
Support for Hotspot JVM, Python, Ruby, PHP, Node.JS, V8, Perl, Erlang, and .NET
100% non-intrusive: no agents or libraries loaded into profiled processes
ARM64 support for all unwinders
Native inline frames for insights into compiler optimizations
Implements the Alpha OTel Profiles signal

Pros & Cons

Pros
  • 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
Cons
  • 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

Best For

Production-scale datacenter profilingWhole-system performance analysis across multiple languagesInvestigating mixed-language stacktraces in containerized environmentsLow-overhead continuous profiling in cloud-native deploymentsDebugging performance issues without modifying application code

FAQ

What is the minimum Linux kernel version required?
The minimum required kernel version is 5.4 for some commits, but more recent versions may require 5.10 or greater. Commit 7ddc23ea supports kernel 4.19, but later changes require at least 5.4.
Does it support ARM64?
Yes, ARM64 support is available for all unwinders.
Do I need to install agents or libraries into the profiled processes?
No, the profiler is 100% non-intrusive. It does not require any agents, libraries, or reconfiguration of target processes.
Which programming languages are supported?
Native code (C/C++, Rust, Zig, Go) and high-level languages including Hotspot JVM, Python, Ruby, PHP, Node.JS, V8, Perl, Erlang, and .NET.
Does it require debug symbols?
No, it works without DWARF debug information for native C/C++ executables and without debug symbols on the host for system libraries.