[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73250":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":16,"starSnapshotCount":16,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},73250,"opentelemetry-ebpf-profiler","open-telemetry\u002Fopentelemetry-ebpf-profiler","open-telemetry","The production-scale datacenter profiler (C\u002FC++, Go, Rust, Python, Java, NodeJS, .NET, PHP, Ruby, Perl, ...)","",null,"Go",3128,405,35,73,0,5,9,23,15,76.63,"Apache License 2.0",false,"main",true,[27,28],"ebpf","profiler","2026-06-12 04:01:08","# Introduction\n\nThis repository implements a whole-system, cross-language profiler for Linux via\neBPF.\n\n## Core features and strengths\n\n- Implements the [Alpha OTel Profiles signal](https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-proto\u002Fpull\u002F775)\n- Very low CPU and memory overhead (1% CPU and 250MB memory are our upper limits\n  in testing and the agent typically manages to stay way below that)\n- Support for native C\u002FC++ executables without the need for DWARF debug\n  information (by leveraging `.eh_frame` data as described in\n  [US11604718B1](https:\u002F\u002Fpatents.google.com\u002Fpatent\u002FUS11604718B1\u002Fen?inventor=thomas+dullien&oq=thomas+dullien))\n- Support profiling of system libraries **without frame pointers** and **without\n  debug symbols on the host**.\n- Support for mixed stacktraces between runtimes - stacktraces go from Kernel\n  space through unmodified system libraries all the way into high-level\n  languages.\n- Support for native code (C\u002FC++, Rust, Zig, Go, etc. without debug symbols on\n  host)\n- Support for a broad set of HLLs, like Hotspot JVM, Python, Ruby, PHP, Node.JS,\n  V8, Perl, Erlang and .NET.\n- 100% non-intrusive: there's no need to load agents or libraries into the\n  processes that are being profiled.\n- No need for any reconfiguration, instrumentation or restarts of HLL\n  interpreters and VMs: the agent supports unwinding each of the supported\n  languages in the default configuration.\n- ARM64 support for all unwinders except .NET.\n- Support for native `inline frames`, which provide insights into compiler\n  optimizations and offer a higher precision of function call chains.\n\n## Building\n\nWe have integrated the profiler into the [OTel Collector](https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fcollector\u002F) as a receiver,\nand this is the [supported configuration](https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-collector-releases\u002Ftree\u002Fmain\u002Fdistributions\u002Fotelcol-ebpf-profiler) going forward.\n\nTo aid with development, testing and debugging, we also offer a standalone profiling agent binary named `ebpf-profiler`,\nand a local build of an OTel Collector profiling receiver binary (`otelcol-ebpf-profiler`). These binaries are not\nsupported in any way, can be dropped in the future and should not be deployed in production.\n\n## Platform Requirements\nThe agent can be built with the provided make targets. Docker is required for containerized builds, and both amd64 and arm64 architectures are supported.\n\n For **Linux**, the following steps apply:\n  1. Build the agent for your current machine's architecture:\n     ```sh\n     make agent\n     ```\n     Or `make debug-agent` for debug build.\n  2. To cross-compile for a different architecture (e.g. arm64):\n     ```sh\n     make agent TARGET_ARCH=arm64\n     ```\nThe resulting binary will be named `ebpf-profiler` in the current directory.\n\n## Other OSes\nSince the profiler is Linux-only, macOS and Windows users need to set up a Linux VM to build and run the agent. Ensure the appropriate architecture is specified if using cross-compilation. Use the same make targets as above after the Linux environment is configured in the VM.\n\n## Supported Linux kernel version\n\nThe minimum required Linux kernel version has increased with certain commits. Specifically:\n\n- Commit [8047150e](https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-ebpf-profiler\u002Fcommit\u002F8047150e3f325f852874591356c69d0487b67d7c) was the last to support kernel version 5.4. Subsequent changes may require a minimal Linux kernel version of 5.10 or greater.\n- Commit [7ddc23ea](https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-ebpf-profiler\u002Fcommit\u002F7ddc23ea135a2e00fffc17850ab90534e9b63108) was the last to support kernel version 4.19. Subsequent changes may require a minimal Linux kernel version of at least 5.4.\n\n### Updating the supported Linux kernel version\n\nThe project maintains its minimum supported kernel version in line with the lowest kernel version currently provided by actively maintained major Linux distributions, which include Debian stable, Red Hat Enterprise Linux, Ubuntu LTS, Amazon Linux and SUSE Linux. The minimum requirement may be increased when all such distributions no longer ship a specific kernel version. This approach enables the codebase to utilize newer eBPF features and avoids the need to maintain compatibility shims for obsolete kernels.\n\nIt should be noted that certain distributions incorporate eBPF features from newer kernels into their supported versions. When this occurs, the distribution's stated kernel version does not accurately reflect its true eBPF capabilities and will not prevent us from increasing the minimum supported version. On such kernels, the `no-kernel-version-check` configuration option can be used to bypass the checks and allow the profiler to execute.\n\n## Alternative Build (Without Docker)\nYou can build the agent without Docker by directly installing the dependencies listed in the Dockerfile. Once dependencies are set up, simply run:\n```sh\nmake\n```\nor\n```sh\nmake debug\n```\nThis will build the profiler natively on your machine.\n\n## Building `otelcol-ebpf-profiler` locally (Without Docker)\nYou can build the local `otelcol-ebpf-profiler` binary by running:\n```sh\nmake otelcol-ebpf-profiler\n```\nor to cross-compile for a different architecture (e.g. arm64):\n```sh\nmake otelcol-ebpf-profiler TARGET_ARCH=arm64\n```\n\nSee [local.example.yml](https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-ebpf-profiler\u002Fblob\u002Fmain\u002Fcmd\u002Fotelcol-ebpf-profiler\u002Flocal.example.yaml) for an example configuration.\n\n## Running\n\nYou can start the agent with the following command:\n\n```sh\nsudo .\u002Febpf-profiler -collection-agent=127.0.0.1:11000 -disable-tls\n```\n\nTo start the OTel Collector profiling receiver, run:\n```sh\nsudo .\u002Fotelcol-ebpf-profiler --feature-gates=+service.profilesSupport --config cmd\u002Fotelcol-ebpf-profiler\u002Flocal.example.yaml\n```\n\nThe agent comes with a functional but work-in-progress \u002F evolving implementation\nof the recently released Alpha OTel Profiles [signal](https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-proto\u002Fpull\u002F775).\n\nThe agent loads the eBPF program and its maps, starts unwinding and reports\ncaptured traces to the backend.\n\n## Open Source Backends\nAs the OTel Profiles signal is still in development, mature production-ready\nbackends have yet to emerge. The following open source projects can be used as backends:\n\n- [devfiler](https:\u002F\u002Fgithub.com\u002Felastic\u002Fdevfiler) — to speed up development and\n  experimentation, Elastic has open-sourced a desktop application that\n  reimplements the backend (collection, data storage, symbolization and UI)\n  portion of the eBPF profiler. Note that devfiler is not a real production\n  backend and should not be used as such. It is solely aimed at testing,\n  experimentation and development.\n- [Pyroscope](https:\u002F\u002Fgithub.com\u002Fgrafana\u002Fpyroscope) — an open source continuous\n  profiling database that natively supports ingesting OTel profiling data.\n\n## Development\n\nTo understand how this project works and learn more about profiling, check out [Profiling internals](doc\u002Finternals.md)\n\n# Legal\n\n## Licensing Information\n\nThis project is licensed under the Apache License 2.0 (Apache-2.0).\n[Apache License 2.0](LICENSE)\n\nThe eBPF source code is licensed under the GPL 2.0 license.\n[GPL 2.0](support\u002Febpf\u002FLICENSE)\n\n### Emeritus\n\n- [Dmitry Filimonov](https:\u002F\u002Fgithub.com\u002Fpetethepig), Maintainer\n- [Joel Höner](https:\u002F\u002Fgithub.com\u002Fathre0z), Approver\n- [Tim Rühsen](https:\u002F\u002Fgithub.com\u002Frockdaboot), Approver\n\nFor more information about the emeritus role, see the\n[community repository](https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fcommunity\u002Fblob\u002Fmain\u002Fguides\u002Fcontributor\u002Fmembership.md#emeritus-maintainerapprovertriager).\n\n## Licenses of dependencies\n\nTo display a summary of the dependencies' licenses:\n```sh\nmake legal\n```\n","open-telemetry\u002Fopentelemetry-ebpf-profiler 是一个基于 eBPF 技术的全系统、跨语言性能分析工具，适用于 Linux 环境下的 C\u002FC++、Go、Rust、Python、Java、NodeJS、.NET、PHP、Ruby 和 Perl 等多种编程语言。该项目实现了 Alpha OTel Profiles 信号，具有极低的 CPU 和内存开销（测试中不超过 1% CPU 和 250MB 内存），支持无 DWARF 调试信息的 C\u002FC++ 可执行文件和无帧指针及调试符号的系统库的性能分析。此外，它还能够生成跨越内核空间到高级语言运行时的混合堆栈跟踪，并且无需在被分析进程中加载任何代理或库，实现完全非侵入式监控。该工具特别适合需要对生产环境中的多语言应用进行低开销性能分析的场景。",2,"2026-06-11 03:44:41","high_star"]