Continuous profiling
Find the code that burns your CPU
The collector's eBPF profiler samples every process on your Linux hosts and Kubernetes nodes, with no code changes or restarts. Explore flame graphs, top functions and stack traces for the whole fleet or one service, and compare any window with the one before it.
- eBPF on Linux · no code changes
- pprof scrape or push
- CPU profiles
How it works
From one policy setting to a fleet-wide flame graph
Profiles are sampled time on the CPU, attributed to the host, process, container and service that spent it.
- 01Turn it onAdd the profiling integration to a Linux collector policy. No second agent and no restarts.
- 02SampleThe eBPF profiler samples each CPU 20 times a second by default, from kernel and native frames to the runtime.
- 03AttributeSamples carry the host, executable, container and thread, and in Kubernetes the service of the pod.
- 04ExploreRead stack traces, a flame graph or top functions, filtered by service, host, executable, container or thread.
- 05CompareCompare any window with the one before it to see which functions gained or lost CPU.
- 06Add other platformsScrape pprof endpoints, or push pprof files from CI jobs and hosts the profiler cannot run on.
Top functions
Rank your code by the CPU it uses
The functions view ranks every function across the fleet by the samples it holds itself and with everything it calls. Turn on the comparison and each row shows how far it moved since the previous period.
- The flame graph shades each frame by whether it used more or less CPU than in the previous period
- Each function shows an estimated annual cost and CO2, from per-core factors you can change for one host
- Search by function, file or executable, then open the match in the flame graph
Collection
Profiling without touching your code
The profiler is the OpenTelemetry eBPF profiler, built into the Tracix Collector. It runs on Linux hosts and Kubernetes nodes, and pprof profiles from other platforms land in the same views.
Whole system
Every process on the host, with kernel, native and Go frames and the JVM, Python, Node.js and .NET runtimes.
Kubernetes aware
Samples map to pods by container ID, then to the service the pod declares or the workload it belongs to.
pprof scrape
Pull CPU profiles from Go's /debug/pprof, async-profiler or py-spy, every 60 seconds by default.
pprof push
Post pprof or collapsed stacks to the collector from CI jobs and air-gapped hosts.
Breakdowns
See which service, host or thread spends the CPU
Stack traces group the samples by thread, host, service, container or executable over time, and any group opens as a flame graph. Samples with no declared service stay unattributed, so nothing is credited to the wrong team.
- Each service's page in APM has a Profiles tab scoped to the pods it runs in
- A span in a trace opens its host's flame graph, top functions and stack traces
- Known Linux idle threads are left out unless you choose to include them
Better together
CPU time, next to the request that spent it
Profiles share a workspace with your traces, pods and software inventory, so a hot function is one click from the service, node and package behind it.
- APM and distributed tracingOpen a slow span's host flame graph, or a service's Profiles tab, from the trace you are reading.Learn more
- Kubernetes and containersSamples are tied to the pod and workload that ran them, the same names the cluster views use.Learn more
- Software inventory and SBOMSampled frames count as evidence that a component actually ran, not just that it was installed.Learn more
Profile sources
Three ways CPU profiles reach Tracix
All three land in the same flame graphs, functions and stack traces, on the same time range and filters.
| Source | Runs on | What it profiles | Service name from |
|---|---|---|---|
| eBPF profiler | Linux hosts and Kubernetes nodes | Every process on the host | The pod in Kubernetes, or the declared service.name |
| pprof scrape | Any endpoint the collector can reach | One target, such as Go's /debug/pprof | The name you give the target |
| pprof push | Anything that can reach the collector | Uploaded pprof files or collapsed stacks | The service in the upload |
Profiles are CPU samples only. Shares describe sampled time on the CPU, not host utilization, and cost and CO2 are estimates.
Does Tracix profile memory or allocations?
Which platforms can be profiled?
Which runtimes show their own frames?
How are the cost and CO2 figures worked out?
See your first flame graph in minutes
Turn on profiling in a Linux collector policy, and the first samples arrive within about a minute.