<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Configure the client to send profiles on Grafana Labs</title><link>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/</link><description>Recent content in Configure the client to send profiles on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/pyroscope/v1.18.x/configure-client/index.xml" rel="self" type="application/rss+xml"/><item><title>Profile types and instrumentation</title><link>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/profile-types/</link><pubDate>Wed, 08 Apr 2026 14:38:28 +0000</pubDate><guid>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/profile-types/</guid><content><![CDATA[&lt;h1 id=&#34;profile-types-and-instrumentation&#34;&gt;Profile types and instrumentation&lt;/h1&gt;
&lt;p&gt;Profiling is an essential tool for understanding and optimizing application performance. In Pyroscope, various profiling types allow for an in-depth analysis of different aspects of your application. This guide explores these types and explain their impact on your program.&lt;/p&gt;
&lt;p&gt;Profiling types refer to different dimensions of application performance analysis, focusing on specific aspects like CPU usage, memory allocation, or thread synchronization.&lt;/p&gt;
&lt;p&gt;Note that when Pyroscope receives a Java wall profile, both &lt;code&gt;cpu&lt;/code&gt; and &lt;code&gt;wall&lt;/code&gt; profiles are automatically ingested, even if &lt;code&gt;cpu&lt;/code&gt; profiling is turned off.&lt;/p&gt;


&lt;div data-shared=&#34;available-profile-types.md&#34;&gt;
            &lt;p&gt;Pyroscope supports these profile types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU (CPU time, wall time)&lt;/li&gt;
&lt;li&gt;Memory (allocation objects, allocation space, heap)&lt;/li&gt;
&lt;li&gt;In use objects and in-use space&lt;/li&gt;
&lt;li&gt;Goroutines&lt;/li&gt;
&lt;li&gt;Mutex count and duration&lt;/li&gt;
&lt;li&gt;Block count and duration&lt;/li&gt;
&lt;li&gt;Lock count and duration&lt;/li&gt;
&lt;li&gt;Exceptions&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

        
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/introduction/profiling-types/&#34;&gt;Understand profiling types and their uses in Pyroscope&lt;/a&gt; for more details about the profile types.&lt;/p&gt;
&lt;h2 id=&#34;profile-type-support-by-instrumentation-method&#34;&gt;Profile type support by instrumentation method&lt;/h2&gt;
&lt;p&gt;The instrumentation method you use determines which profile types are available. You can use either auto or manual instrumentation.&lt;/p&gt;
&lt;h3 id=&#34;auto-instrumentation-with-grafana-alloy&#34;&gt;Auto-instrumentation with Grafana Alloy&lt;/h3&gt;
&lt;p&gt;You can send data from your application using Grafana Alloy collector. Alloy supports profiling with eBPF, Java, and Golang in pull mode.&lt;/p&gt;


&lt;div data-shared=&#34;supported-languages-ebpf.md&#34;&gt;
            &lt;p&gt;The eBPF profiler collects CPU profiles.
Natively compiled languages like C/C&#43;&#43;, Go, Rust, and Zig are supported. Frame pointers are not required — the profiler uses &lt;code&gt;.eh_frame&lt;/code&gt; data for unwinding.
Refer to &lt;a href=&#34;/docs/pyroscope/latest/configure-client/grafana-alloy/ebpf/troubleshooting/#troubleshoot-unknown-symbols&#34;&gt;Troubleshooting unknown symbols&lt;/a&gt; for additional requirements and information.&lt;/p&gt;
&lt;p&gt;The following high-level languages are also supported: Java (Hotspot JVM), .NET, Python, Ruby, PHP, Node.js, and Perl.
Each high-level language can be individually enabled or disabled in the &lt;a href=&#34;/docs/alloy/latest/reference/components/pyroscope/pyroscope.ebpf/&#34;&gt;pyroscope.ebpf&lt;/a&gt; Alloy component configuration.&lt;/p&gt;
&lt;/div&gt;

        
&lt;p&gt;For more information, refer to 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/grafana-alloy/&#34;&gt;Configure the client to send profiles with Grafana Alloy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This table lists the available profile types based on auto instrumentation using Alloy.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Profile type&lt;/th&gt;
              &lt;th&gt;Go (pull)&lt;/th&gt;
              &lt;th&gt;Java&lt;/th&gt;
              &lt;th&gt;eBPF&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;CPU&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Alloc Objects&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Alloc Space&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Inuse Objects&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Inuse Space&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Goroutines&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mutex Count&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mutex Duration&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Block Count&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Block Duration&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Lock Count&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Lock Duration&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Exceptions&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Wall&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Heap&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;instrumentation-with-sdks&#34;&gt;Instrumentation with SDKs&lt;/h3&gt;
&lt;p&gt;Using the Pyroscope language SDKs lets you instrument your application directly for precise profiling. You can customize the profiling process according to your application’s specific requirements.&lt;/p&gt;
&lt;p&gt;For more information on the language SDKs, refer to 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/language-sdks/&#34;&gt;Pyroscope language SDKs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This table lists the available profile types based on the language SDK.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Profile type&lt;/th&gt;
              &lt;th&gt;Go (push)&lt;/th&gt;
              &lt;th&gt;Java&lt;/th&gt;
              &lt;th&gt;.NET&lt;/th&gt;
              &lt;th&gt;Ruby&lt;/th&gt;
              &lt;th&gt;Python&lt;/th&gt;
              &lt;th&gt;Rust&lt;/th&gt;
              &lt;th&gt;Node.js&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;CPU&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Alloc Objects&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Alloc Space&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Inuse Objects&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes (7.0&#43;)&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Inuse Space&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes (7.0&#43;)&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Goroutines&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mutex Count&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mutex Duration&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Block Count&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Block Duration&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Lock Count&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Lock Duration&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Exceptions&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Wall&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Heap&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes (7.0&#43;)&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;Yes&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;profile-types-supported-with-span-profiles&#34;&gt;Profile types supported with span profiles&lt;/h2&gt;
&lt;p&gt;Pyroscope can integrate with distributed tracing systems supporting the OpenTelemetry standard. This integration lets you link traces with the profiling data and find resource usage for specific lines of code for your trace spans.&lt;/p&gt;
&lt;p&gt;Only CPU profile type is supported for span profiles.&lt;/p&gt;
&lt;p&gt;The following languages are supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/go-span-profiles/&#34;&gt;Go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/java-span-profiles/&#34;&gt;Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/ruby-span-profiles/&#34;&gt;Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/dotnet-span-profiles/&#34;&gt;.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/python-span-profiles/&#34;&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="profile-types-and-instrumentation">Profile types and instrumentation&lt;/h1>
&lt;p>Profiling is an essential tool for understanding and optimizing application performance. In Pyroscope, various profiling types allow for an in-depth analysis of different aspects of your application. This guide explores these types and explain their impact on your program.&lt;/p></description></item><item><title>OpenTelemetry profiling support</title><link>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/opentelemetry/ebpf-profiler/</link><pubDate>Wed, 08 Apr 2026 14:38:28 +0000</pubDate><guid>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/opentelemetry/ebpf-profiler/</guid><content><![CDATA[&lt;h1 id=&#34;opentelemetry-profiling-support&#34;&gt;OpenTelemetry profiling support&lt;/h1&gt;
&lt;p&gt;Pyroscope includes &lt;strong&gt;experimental&lt;/strong&gt; support for receiving and visualizing profiles from OpenTelemetry sources. This integration allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Collect system-wide profiles using the &lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-ebpf-profiler&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenTelemetry eBPF profiler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Process profile data through the OpenTelemetry Collector&lt;/li&gt;
&lt;li&gt;Visualize profiles in Grafana using Pyroscope&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;considerations&#34;&gt;Considerations&lt;/h2&gt;
&lt;p&gt;Before getting started, you should consider the following limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The OpenTelemetry profiles protocol (&lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-proto/tree/main/opentelemetry/proto/profiles&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;proto files&lt;/a&gt;) is under active development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Breaking changes are expected and have occurred&lt;/li&gt;
&lt;li&gt;Compatibility between components (profiler, collector, backend) requires careful version management&lt;/li&gt;
&lt;li&gt;We maintain support for the latest protocol version, but updates may be required frequently&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Symbolization support is currently limited:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Function names may not appear in flamegraphs for some programs&lt;/li&gt;
&lt;li&gt;We&amp;rsquo;re working on improving symbol resolution and adding support for manual symbol uploads&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We recommend evaluating this feature for development and testing purposes, but waiting for protocol stabilization before production use&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Linux system (amd64/arm64) for eBPF profiler&lt;/li&gt;
&lt;li&gt;OpenTelemetry Collector with profiles feature gate enabled&lt;/li&gt;
&lt;li&gt;Grafana with Pyroscope data source enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;
&lt;p&gt;The profile collection pipeline consists of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;OpenTelemetry eBPF Profiler&lt;/strong&gt;: Collects system-wide profiles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenTelemetry Collector&lt;/strong&gt;: Receives and forwards profile data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pyroscope&lt;/strong&gt;: Stores and processes profiles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grafana&lt;/strong&gt;: Visualizes profile data&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;get-started&#34;&gt;Get started&lt;/h2&gt;
&lt;p&gt;For detailed setup instructions and working examples, refer to the &lt;a href=&#34;https://github.com/grafana/pyroscope/tree/main/examples/grafana-alloy-auto-instrumentation/ebpf-otel&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;examples repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The examples demonstrate deployments for both Docker and Kubernetes environments.&lt;/p&gt;
]]></content><description>&lt;h1 id="opentelemetry-profiling-support">OpenTelemetry profiling support&lt;/h1>
&lt;p>Pyroscope includes &lt;strong>experimental&lt;/strong> support for receiving and visualizing profiles from OpenTelemetry sources. This integration allows you to:&lt;/p>
&lt;ul>
&lt;li>Collect system-wide profiles using the &lt;a href="https://github.com/open-telemetry/opentelemetry-ebpf-profiler" target="_blank" rel="noopener noreferrer">OpenTelemetry eBPF profiler&lt;/a>&lt;/li>
&lt;li>Process profile data through the OpenTelemetry Collector&lt;/li>
&lt;li>Visualize profiles in Grafana using Pyroscope&lt;/li>
&lt;/ul>
&lt;h2 id="considerations">Considerations&lt;/h2>
&lt;p>Before getting started, you should consider the following limitations:&lt;/p></description></item><item><title>Grafana Alloy</title><link>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/grafana-alloy/</link><pubDate>Wed, 08 Apr 2026 14:38:28 +0000</pubDate><guid>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/grafana-alloy/</guid><content><![CDATA[&lt;h1 id=&#34;grafana-alloy&#34;&gt;Grafana Alloy&lt;/h1&gt;
&lt;p&gt;You can send data from your application using Grafana Alloy (preferred) or Grafana Agent (legacy) collectors.
Both collectors support profiling with eBPF, Java, and Golang in pull mode.&lt;/p&gt;


&lt;div data-shared=&#34;supported-languages-ebpf.md&#34;&gt;
            &lt;p&gt;The eBPF profiler collects CPU profiles.
Natively compiled languages like C/C&#43;&#43;, Go, Rust, and Zig are supported. Frame pointers are not required — the profiler uses &lt;code&gt;.eh_frame&lt;/code&gt; data for unwinding.
Refer to &lt;a href=&#34;/docs/pyroscope/latest/configure-client/grafana-alloy/ebpf/troubleshooting/#troubleshoot-unknown-symbols&#34;&gt;Troubleshooting unknown symbols&lt;/a&gt; for additional requirements and information.&lt;/p&gt;
&lt;p&gt;The following high-level languages are also supported: Java (Hotspot JVM), .NET, Python, Ruby, PHP, Node.js, and Perl.
Each high-level language can be individually enabled or disabled in the &lt;a href=&#34;/docs/alloy/latest/reference/components/pyroscope/pyroscope.ebpf/&#34;&gt;pyroscope.ebpf&lt;/a&gt; Alloy component configuration.&lt;/p&gt;
&lt;/div&gt;

        
&lt;p&gt;
    &lt;a href=&#34;/docs/alloy/v1.18.x/&#34;&gt;Grafana Alloy&lt;/a&gt; is a vendor-neutral distribution of the OpenTelemetry (OTel) Collector.
Alloy uniquely combines the very best OSS observability signals in the community.
Alloy uses configuration files written in Alloy configuration syntax.
For  more information, refer to the 
    &lt;a href=&#34;/docs/alloy/v1.18.x/get-started/configuration-syntax/&#34;&gt;Alloy configuration syntax&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alloy is the recommended collector instead of Grafana Agent.
New installations should use Alloy.&lt;/p&gt;
&lt;p&gt;The instructions in this section explain how to use Alloy.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/profile-types/&#34;&gt;Available profiling types&lt;/a&gt; for a list of supported profile types.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;legacy-collector-grafana-agent&#34;&gt;Legacy collector, Grafana Agent&lt;/h2&gt;


&lt;div data-shared=&#34;agent-deprecation.md&#34;&gt;
            

&lt;div class=&#34;admonition admonition-caution&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Caution&lt;/p&gt;&lt;p&gt;Grafana Alloy is the new name for our distribution of the OTel collector.
Grafana Agent has been deprecated and is in Long-Term Support (LTS) through October 31, 2025. Grafana Agent will reach an End-of-Life (EOL) on November 1, 2025.
Read more about why we recommend migrating to &lt;a href=&#34;/blog/2024/04/09/grafana-alloy-opentelemetry-collector-with-prometheus-pipelines/&#34;&gt;Grafana Alloy&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/div&gt;

        
&lt;p&gt;Grafana Agent is a legacy tool for collecting and forwarding profiling data.
Agent supports for eBPF and Golang in pull mode.
For information about Agent, refer to 
    &lt;a href=&#34;/docs/agent/v1.18.x/flow/&#34;&gt;Grafana Agent Flow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Instructions for using Grafana Agent are available in documentation for Pyroscope v1.8 and earlier.&lt;/p&gt;
&lt;h2 id=&#34;ebpf-profiling&#34;&gt;eBPF profiling&lt;/h2&gt;
&lt;p&gt;eBPF (Extended Berkeley Packet Filter) is a modern Linux kernel technology that allows for safe, efficient, and customizable tracing of system and application behaviors without modifying the source code or restarting processes.&lt;/p&gt;
&lt;p&gt;Benefits of eBPF profiling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Low overhead: eBPF collects data with minimal impact on performance.&lt;/li&gt;
&lt;li&gt;Versatile: eBPF can trace system calls, network packets, and even user-space application logic.&lt;/li&gt;
&lt;li&gt;Dynamic: No need to recompile or restart applications. eBPF allows for live tracing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;set-up-ebpf-profiling&#34;&gt;Set up eBPF profiling&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Ensure your system runs a Linux kernel version 4.9 or newer.&lt;/li&gt;
&lt;li&gt;Install a collector, such as Alloy, on the target machine or container.&lt;/li&gt;
&lt;li&gt;Configure Alloy to use eBPF for profiling. Refer to the 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/grafana-alloy/ebpf/&#34;&gt;eBPF documentation&lt;/a&gt; for detailed steps.&lt;/li&gt;
&lt;li&gt;The collector collects eBPF profiles and sends them to the Pyroscope server.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;supported-languages&#34;&gt;Supported languages&lt;/h3&gt;


&lt;div data-shared=&#34;supported-languages-ebpf.md&#34;&gt;
            &lt;p&gt;The eBPF profiler collects CPU profiles.
Natively compiled languages like C/C&#43;&#43;, Go, Rust, and Zig are supported. Frame pointers are not required — the profiler uses &lt;code&gt;.eh_frame&lt;/code&gt; data for unwinding.
Refer to &lt;a href=&#34;/docs/pyroscope/latest/configure-client/grafana-alloy/ebpf/troubleshooting/#troubleshoot-unknown-symbols&#34;&gt;Troubleshooting unknown symbols&lt;/a&gt; for additional requirements and information.&lt;/p&gt;
&lt;p&gt;The following high-level languages are also supported: Java (Hotspot JVM), .NET, Python, Ruby, PHP, Node.js, and Perl.
Each high-level language can be individually enabled or disabled in the &lt;a href=&#34;/docs/alloy/latest/reference/components/pyroscope/pyroscope.ebpf/&#34;&gt;pyroscope.ebpf&lt;/a&gt; Alloy component configuration.&lt;/p&gt;
&lt;/div&gt;

        
&lt;h2 id=&#34;golang-profiling-in-pull-mode&#34;&gt;Golang profiling in pull mode&lt;/h2&gt;
&lt;p&gt;In pull mode, the collector periodically retrieves profiles from Golang applications, specifically targeting the pprof endpoints.&lt;/p&gt;
&lt;h3 id=&#34;benefits-of-golang-profiling-in-pull-mode&#34;&gt;Benefits of Golang profiling in pull mode&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Non-intrusive: No need to modify your application’s source code.&lt;/li&gt;
&lt;li&gt;Centralized profiling: Suitable for environments with multiple Golang applications or microservices.&lt;/li&gt;
&lt;li&gt;Automatic: Alloy handles the pulling and sending of profiles, requiring minimal configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;set-up-golang-profiling-in-pull-mode&#34;&gt;Set up Golang profiling in pull mode&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Ensure your Golang application exposes pprof endpoints.&lt;/li&gt;
&lt;li&gt;Install and configure Alloy on the same machine or container where your application runs.&lt;/li&gt;
&lt;li&gt;Ensure Alloy is set to pull mode and targeting the correct pprof endpoints. For step-by-step instructions, visit the 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/grafana-alloy/go_pull/&#34;&gt;Go (Pull Mode)&lt;/a&gt; documentation.&lt;/li&gt;
&lt;li&gt;The collector queries the pprof endpoints of your Golang application, collects the profiles, and forwards them to the Pyroscope server.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;receive-profiles-from-pyroscope-sdks&#34;&gt;Receive profiles from Pyroscope SDKs&lt;/h2&gt;
&lt;p&gt;Alloy can receive profiles from applications instrumented with Pyroscope SDKs through the &lt;code&gt;pyroscope.receive_http&lt;/code&gt; component. This approach provides several key advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved performance by sending profiles to a local Alloy instance instead of over the internet to Grafana Cloud, reducing latency and application impact&lt;/li&gt;
&lt;li&gt;Separation of infrastructure concerns from application code - developers don&amp;rsquo;t need to handle authentication, tenant configuration, or infrastructure labels in their code&lt;/li&gt;
&lt;li&gt;Centralized management of authentication and metadata enrichment (for example, Kubernetes labels, business labels)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This capability is not available in the legacy Grafana Agent.&lt;/p&gt;
&lt;h3 id=&#34;set-up-profile-receiving&#34;&gt;Set up profile receiving&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Configure your application with a Pyroscope SDK pointing to the &lt;code&gt;pyroscope.receive_http&lt;/code&gt; Alloy component.&lt;/li&gt;
&lt;li&gt;For step-by-step instructions, refer to the 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/grafana-alloy/receive_profiles/&#34;&gt;Receive profiles from Pyroscope SDKs&lt;/a&gt; documentation.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Whether using eBPF for versatile system and application profiling or relying on Golang&amp;rsquo;s built-in pprof endpoints in pull mode, Alloy collectors offer streamlined processes to gather essential profiling data.
Choose the method that best fits your application and infrastructure needs.&lt;/p&gt;
]]></content><description>&lt;h1 id="grafana-alloy">Grafana Alloy&lt;/h1>
&lt;p>You can send data from your application using Grafana Alloy (preferred) or Grafana Agent (legacy) collectors.
Both collectors support profiling with eBPF, Java, and Golang in pull mode.&lt;/p></description></item><item><title>Pyroscope language SDKs</title><link>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/language-sdks/</link><pubDate>Wed, 08 Apr 2026 14:38:28 +0000</pubDate><guid>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/language-sdks/</guid><content><![CDATA[&lt;h1 id=&#34;pyroscope-language-sdks&#34;&gt;Pyroscope language SDKs&lt;/h1&gt;
&lt;p&gt;The following languages SDKs provide support for sending profiles from your application:&lt;/p&gt;
&lt;table&gt;
   &lt;tr&gt;
      &lt;td align=&#34;center&#34;&gt;&lt;a href=&#34;./go_push&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/23323466/178160549-2d69a325-56ec-4e19-bca7-d460d400b163.png&#34; width=&#34;100px;&#34; alt=&#34;&#34;/&gt;&lt;br /&gt;
        &lt;b&gt;Golang&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;./go_push&#34; title=&#34;Documentation&#34;&gt;Documentation&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/golang-push&#34; title=&#34;golang-examples&#34;&gt;Examples&lt;/a&gt;
      &lt;/td&gt;
      &lt;td align=&#34;center&#34;&gt;&lt;a href=&#34;./java&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/23323466/178160550-2b5a623a-0f4c-4911-923f-2c825784d45d.png&#34; width=&#34;100px;&#34; alt=&#34;&#34;/&gt;&lt;br /&gt;
        &lt;b&gt;Java&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;./java&#34; title=&#34;Documentation&#34;&gt;Documentation&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/java/rideshare&#34; title=&#34;java-examples&#34;&gt;Examples&lt;/a&gt;
      &lt;/td&gt;
      &lt;td align=&#34;center&#34;&gt;&lt;a href=&#34;./python&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/23323466/178160553-c78b8c15-99b4-43f3-a2a0-252b6c4862b1.png&#34; width=&#34;100px;&#34; alt=&#34;&#34;/&gt;&lt;br /&gt;
        &lt;b&gt;Python&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;./python&#34; title=&#34;Documentation&#34;&gt;Documentation&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/python&#34; title=&#34;python-examples&#34;&gt;Examples&lt;/a&gt;
      &lt;/td&gt;
      &lt;td align=&#34;center&#34;&gt;&lt;a href=&#34;./ruby&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/23323466/178160554-b0be2bc5-8574-4881-ac4c-7977c0b2c195.png&#34; width=&#34;100px;&#34; alt=&#34;&#34;/&gt;&lt;br /&gt;
        &lt;b&gt;Ruby&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;./ruby&#34; title=&#34;Documentation&#34;&gt;Documentation&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/ruby&#34; title=&#34;ruby-examples&#34;&gt;Examples&lt;/a&gt;
      &lt;/td&gt;
   &lt;/tr&gt;
   &lt;tr&gt;
      &lt;td align=&#34;center&#34;&gt;&lt;a href=&#34;./nodejs&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/23323466/178160551-a79ee6ff-a5d6-419e-89e6-39047cb08126.png&#34; width=&#34;100px;&#34; alt=&#34;&#34;/&gt;&lt;br /&gt;
        &lt;b&gt;Node.js&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;./nodejs&#34; title=&#34;Documentation&#34;&gt;Documentation&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/nodejs/express&#34; title=&#34;examples&#34;&gt;Examples&lt;/a&gt;
      &lt;/td&gt;
      &lt;td align=&#34;center&#34;&gt;&lt;a href=&#34;./dotnet&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/23323466/178160544-d2e189c6-a521-482c-a7dc-5375c1985e24.png&#34; width=&#34;100px;&#34; alt=&#34;&#34;/&gt;&lt;br /&gt;
        &lt;b&gt;.NET&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;./dotnet&#34; title=&#34;Documentation&#34;&gt;Documentation&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/dotnet&#34; title=&#34;examples&#34;&gt;Examples&lt;/a&gt;
      &lt;/td&gt;
      &lt;td align=&#34;center&#34;&gt;&lt;a href=&#34;https://grafana.com/docs/pyroscope/latest/configure-client/grafana-alloy/ebpf/&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/23323466/178160548-e974c080-808d-4c5d-be9b-c983a319b037.png&#34; width=&#34;100px;&#34; alt=&#34;&#34;/&gt;&lt;br /&gt;
        &lt;b&gt;eBPF&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;https://grafana.com/docs/pyroscope/latest/configure-client/grafana-alloy/ebpf/&#34; title=&#34;Documentation&#34;&gt;Documentation&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;https://github.com/grafana/pyroscope/tree/main/examples/grafana-alloy-auto-instrumentation/ebpf&#34; title=&#34;examples&#34;&gt;Examples&lt;/a&gt;
      &lt;/td&gt;
      &lt;td align=&#34;center&#34;&gt;&lt;a href=&#34;./rust&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/23323466/178160555-fb6aeee7-5d31-4bcb-9e3e-41e9f2f7d5b4.png&#34; width=&#34;100px;&#34; alt=&#34;&#34;/&gt;&lt;br /&gt;
        &lt;b&gt;Rust&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;./rust&#34; title=&#34;Documentation&#34;&gt;Documentation&lt;/a&gt;&lt;br /&gt;
          &lt;a href=&#34;https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/rust/rideshare&#34; title=&#34;examples&#34;&gt;Examples&lt;/a&gt;
      &lt;/td&gt;
   &lt;/tr&gt;
&lt;/table&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/profile-types/&#34;&gt;Available profiling types&lt;/a&gt; for a list of profile types supported by each language.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;If you&amp;rsquo;re interested in integrating other ecosystems, reach out to us on &lt;a href=&#34;https://github.com/grafana/pyroscope/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
]]></content><description>&lt;h1 id="pyroscope-language-sdks">Pyroscope language SDKs&lt;/h1>
&lt;p>The following languages SDKs provide support for sending profiles from your application:&lt;/p>
&lt;table>
&lt;tr>
&lt;td align="center">&lt;a href="./go_push">&lt;img src="https://user-images.githubusercontent.com/23323466/178160549-2d69a325-56ec-4e19-bca7-d460d400b163.png" width="100px;" alt=""/>&lt;br />
&lt;b>Golang&lt;/b>&lt;/a>&lt;br />
&lt;a href="./go_push" title="Documentation">Documentation&lt;/a>&lt;br />
&lt;a href="https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/golang-push" title="golang-examples">Examples&lt;/a>
&lt;/td>
&lt;td align="center">&lt;a href="./java">&lt;img src="https://user-images.githubusercontent.com/23323466/178160550-2b5a623a-0f4c-4911-923f-2c825784d45d.png" width="100px;" alt=""/>&lt;br />
&lt;b>Java&lt;/b>&lt;/a>&lt;br />
&lt;a href="./java" title="Documentation">Documentation&lt;/a>&lt;br />
&lt;a href="https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/java/rideshare" title="java-examples">Examples&lt;/a>
&lt;/td>
&lt;td align="center">&lt;a href="./python">&lt;img src="https://user-images.githubusercontent.com/23323466/178160553-c78b8c15-99b4-43f3-a2a0-252b6c4862b1.png" width="100px;" alt=""/>&lt;br />
&lt;b>Python&lt;/b>&lt;/a>&lt;br />
&lt;a href="./python" title="Documentation">Documentation&lt;/a>&lt;br />
&lt;a href="https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/python" title="python-examples">Examples&lt;/a>
&lt;/td>
&lt;td align="center">&lt;a href="./ruby">&lt;img src="https://user-images.githubusercontent.com/23323466/178160554-b0be2bc5-8574-4881-ac4c-7977c0b2c195.png" width="100px;" alt=""/>&lt;br />
&lt;b>Ruby&lt;/b>&lt;/a>&lt;br />
&lt;a href="./ruby" title="Documentation">Documentation&lt;/a>&lt;br />
&lt;a href="https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/ruby" title="ruby-examples">Examples&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="center">&lt;a href="./nodejs">&lt;img src="https://user-images.githubusercontent.com/23323466/178160551-a79ee6ff-a5d6-419e-89e6-39047cb08126.png" width="100px;" alt=""/>&lt;br />
&lt;b>Node.js&lt;/b>&lt;/a>&lt;br />
&lt;a href="./nodejs" title="Documentation">Documentation&lt;/a>&lt;br />
&lt;a href="https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/nodejs/express" title="examples">Examples&lt;/a>
&lt;/td>
&lt;td align="center">&lt;a href="./dotnet">&lt;img src="https://user-images.githubusercontent.com/23323466/178160544-d2e189c6-a521-482c-a7dc-5375c1985e24.png" width="100px;" alt=""/>&lt;br />
&lt;b>.NET&lt;/b>&lt;/a>&lt;br />
&lt;a href="./dotnet" title="Documentation">Documentation&lt;/a>&lt;br />
&lt;a href="https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/dotnet" title="examples">Examples&lt;/a>
&lt;/td>
&lt;td align="center">&lt;a href="https://grafana.com/docs/pyroscope/latest/configure-client/grafana-alloy/ebpf/">&lt;img src="https://user-images.githubusercontent.com/23323466/178160548-e974c080-808d-4c5d-be9b-c983a319b037.png" width="100px;" alt=""/>&lt;br />
&lt;b>eBPF&lt;/b>&lt;/a>&lt;br />
&lt;a href="https://grafana.com/docs/pyroscope/latest/configure-client/grafana-alloy/ebpf/" title="Documentation">Documentation&lt;/a>&lt;br />
&lt;a href="https://github.com/grafana/pyroscope/tree/main/examples/grafana-alloy-auto-instrumentation/ebpf" title="examples">Examples&lt;/a>
&lt;/td>
&lt;td align="center">&lt;a href="./rust">&lt;img src="https://user-images.githubusercontent.com/23323466/178160555-fb6aeee7-5d31-4bcb-9e3e-41e9f2f7d5b4.png" width="100px;" alt=""/>&lt;br />
&lt;b>Rust&lt;/b>&lt;/a>&lt;br />
&lt;a href="./rust" title="Documentation">Documentation&lt;/a>&lt;br />
&lt;a href="https://github.com/grafana/pyroscope/tree/main/examples/language-sdk-instrumentation/rust/rideshare" title="examples">Examples&lt;/a>
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p></description></item><item><title>Link tracing and profiling with Span Profiles</title><link>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/</link><pubDate>Wed, 08 Apr 2026 14:38:28 +0000</pubDate><guid>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/</guid><content><![CDATA[&lt;h1 id=&#34;link-tracing-and-profiling-with-span-profiles&#34;&gt;Link tracing and profiling with Span Profiles&lt;/h1&gt;
&lt;p&gt;Span Profiles are a powerful feature that further enhances the value of continuous profiling.
Span Profiles offer a novel approach to profiling by providing detailed insights into specific execution scopes of applications, moving beyond the traditional system-wide analysis to offer a more dynamic, focused analysis of individual requests or trace spans.&lt;/p&gt;
&lt;p&gt;This method enhances understanding of application behavior by directly linking traces with profiling data, enabling engineering teams to pinpoint and resolve performance bottlenecks with precision.&lt;/p&gt;
&lt;p&gt;Key benefits and features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deep analysis: Understand the specifics of code execution within particular time frames, offering granular insights into application performance&lt;/li&gt;
&lt;li&gt;Seamless integration: Smoothly transition from a high-level trace overview to detailed profiling of specific trace spans within Grafana’s trace view&lt;/li&gt;
&lt;li&gt;Efficiency and cost savings: Quickly identify and address performance issues, reducing troubleshooting time and operational costs&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Span profiling is only effective on spans longer than 20ms to ensure statistical accuracy.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;get-started&#34;&gt;Get started&lt;/h2&gt;
&lt;p&gt;Select an option from the list below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configure Pyroscope: Begin sending profiling data to unlock the full potential of Span Profiles&lt;/li&gt;
&lt;li&gt;Client-side packages: Easily link traces and profiles using available packages for Go, Java, Ruby, .NET, and Python
&lt;ul&gt;
&lt;li&gt;Go: 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/go-span-profiles/&#34;&gt;Span profiles with Traces to profiles (Go)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java: 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/java-span-profiles/&#34;&gt;Span profiles with Traces to profiles (Java)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ruby: 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/ruby-span-profiles/&#34;&gt;Span profiles with Traces to profiles (Ruby)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;.NET: 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/dotnet-span-profiles/&#34;&gt;Span profiles with Traces to profiles (.NET)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python: 
    &lt;a href=&#34;/docs/pyroscope/v1.18.x/configure-client/trace-span-profiles/python-span-profiles/&#34;&gt;Span profiles with Traces to profiles (Python)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source/&#34;&gt;Configure the Tempo data source in Grafana or Grafana Cloud&lt;/a&gt; to discover linked traces and profiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To learn more, check out the product announcement blog: &lt;a href=&#34;/blog/2024/02/06/combining-tracing-and-profiling-for-enhanced-observability-introducing-span-profiles/&#34;&gt;Introducing Span Profiles&lt;/a&gt;.&lt;/p&gt;
]]></content><description>&lt;h1 id="link-tracing-and-profiling-with-span-profiles">Link tracing and profiling with Span Profiles&lt;/h1>
&lt;p>Span Profiles are a powerful feature that further enhances the value of continuous profiling.
Span Profiles offer a novel approach to profiling by providing detailed insights into specific execution scopes of applications, moving beyond the traditional system-wide analysis to offer a more dynamic, focused analysis of individual requests or trace spans.&lt;/p></description></item><item><title>AWS Lambda profiling extension</title><link>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/aws-lambda/</link><pubDate>Wed, 08 Apr 2026 14:38:28 +0000</pubDate><guid>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/aws-lambda/</guid><content><![CDATA[&lt;h1 id=&#34;aws-lambda-profiling-extension&#34;&gt;AWS Lambda profiling extension&lt;/h1&gt;
&lt;p&gt;The Pyroscope AWS Lambda extension is a robust tool for profiling AWS Lambda functions, ensuring minimal latency impact. This profiling is essential for optimizing your functions.&lt;/p&gt;
&lt;h2 id=&#34;why-profile-aws-lambda-functions&#34;&gt;Why profile AWS Lambda functions?&lt;/h2&gt;
&lt;p&gt;AWS Lambda functions, while powerful and flexible, can lead to significant costs if not managed efficiently.
Serverless architectures, like AWS Lambda, can mask performance issues.
Since Lambda functions are billed based on execution time and allocated memory, code inefficiencies can lead to higher costs. Often, these costs accumulate unnoticed because of the following reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Granular billing&lt;/strong&gt;: Lambda functions are billed in milliseconds, which can make small inefficiencies seem insignificant at first. However, when scaled to thousands or millions of invocations, these inefficiencies can lead to substantial costs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Complex performance profile&lt;/strong&gt;: Lambda functions may interact with various services and resources, making it challenging to pinpoint performance bottlenecks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Variable load&lt;/strong&gt;: The serverless nature of AWS Lambda means that functions might handle variable loads at different times, making it hard to optimize for every scenario.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Profiling Lambda functions helps identify these hidden performance bottlenecks, enabling developers to optimize their code for both performance and cost.
Effective profiling can reveal inefficient code paths, unnecessary memory usage, and areas where the execution time can be reduced.
By addressing these issues, organizations can significantly reduce their AWS bill, improve application responsiveness, and ensure a more efficient use of resources.&lt;/p&gt;
&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;
&lt;p&gt;This extension runs a relay server on the same network namespace as the Lambda function, ensuring minimal added latency.&lt;/p&gt;
&lt;p&gt;&lt;img
  class=&#34;lazyload d-inline-block&#34;
  data-src=&#34;https://user-images.githubusercontent.com/23323466/186037668-44de7caa-6576-422a-b3f7-8416325f4a98.png&#34;
  alt=&#34;Lambda Extension Architecture&#34;/&gt;&lt;/p&gt;
&lt;p&gt;For more details, refer to the &lt;a href=&#34;https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Building Extensions for AWS Lambda blog post&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;set-up-the-pyroscope-lambda-extension&#34;&gt;Set up the Pyroscope Lambda extension&lt;/h2&gt;
&lt;p&gt;To set up the Pyroscope Lambda extension, you need to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Configure your Lambda function&lt;/li&gt;
&lt;li&gt;Set up your environment variables&lt;/li&gt;
&lt;li&gt;Integrate the Pyroscope SDK&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;configure-your-lambda-function&#34;&gt;Configure your Lambda function&lt;/h3&gt;
&lt;p&gt;Configure your Lambda function to use the extension. Find the latest release on our &lt;a href=&#34;https://github.com/grafana/pyroscope-lambda-extension/releases&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;releases page&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;set-up-the-environment-variables&#34;&gt;Set up the environment variables&lt;/h3&gt;
&lt;p&gt;Configure the extension with the following environment variables:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Environment Variable&lt;/th&gt;
              &lt;th&gt;Default Value&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;PYROSCOPE_REMOTE_ADDRESS&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;https://profiles-prod-001.grafana.net&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Destination for relayed Pyroscope data&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;PYROSCOPE_BASIC_AUTH_USER&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;HTTP Basic authentication user&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;PYROSCOPE_BASIC_AUTH_PASSWORD&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;HTTP Basic authentication password&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;PYROSCOPE_SELF_PROFILING&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Whether to profile the extension itself&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;PYROSCOPE_LOG_LEVEL&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;info&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Log level (&lt;code&gt;error&lt;/code&gt;, &lt;code&gt;info&lt;/code&gt;, &lt;code&gt;debug&lt;/code&gt;, &lt;code&gt;trace&lt;/code&gt;)&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;PYROSCOPE_TIMEOUT&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;10s&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;HTTP client timeout (in Go duration format)&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;PYROSCOPE_NUM_WORKERS&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Number of relay workers&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;PYROSCOPE_TENANT_ID&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Pyroscope tenant ID (for multi-tenancy)&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;integrate-the-pyroscope-sdk&#34;&gt;Integrate the Pyroscope SDK&lt;/h3&gt;
&lt;p&gt;The Pyroscope AWS Lambda extension is compatible with all existing Pyroscope SDKs. Here are some key considerations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initialize the SDK before setting up the AWS Lambda handler.&lt;/li&gt;
&lt;li&gt;Ensure that the Pyroscope server address is configured to http://localhost:4040.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that the SDK packages are not automatically included in the extension layer. For Java, Python, Node.js, and Ruby, you must either include the SDK package in the function deployment package or add it as a Lambda layer. Refer to the detailed guide in the AWS Lambda documentation for your specific runtime for further instructions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.aws.amazon.com/lambda/latest/dg/java-package.html#java-package-layers&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-dependencies&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.aws.amazon.com/lambda/latest/dg/ruby-package.html#ruby-package-runtime-dependencies&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html#nodejs-package-dependencies&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a Golang Lambda function, integrate the Pyroscope SDK as follows:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Go&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-go&#34;&gt;func HandleRequest(ctx context.Context) (string, error) {
    return &amp;#34;Hello world!&amp;#34;, nil
}

func main() {
    pyroscope.Start(pyroscope.Config{
        ApplicationName: &amp;#34;simple.golang.lambda&amp;#34;,
        ServerAddress:   &amp;#34;http://localhost:4040&amp;#34;,
    })
    lambda.Start(HandleRequest)
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Replace &lt;code&gt;simple.golang.lambda&lt;/code&gt; with your application name.&lt;/p&gt;
&lt;h2 id=&#34;use-cases&#34;&gt;Use cases&lt;/h2&gt;
&lt;p&gt;Once set up, you can use the Pyroscope UI to analyze your Lambda function&amp;rsquo;s data to facilitate performance optimizations. For more on this, visit our &lt;a href=&#34;http://pyroscope.io/blog/profile-aws-lambda-functions&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Pyroscope AWS Lambda Extension blog post&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;send-data-to-pyroscope&#34;&gt;Send data to Pyroscope&lt;/h2&gt;
&lt;p&gt;To configure the extension for data transmission:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;PYROSCOPE_REMOTE_ADDRESS=&amp;#34;&amp;lt;URL&amp;gt;&amp;#34;
PYROSCOPE_BASIC_AUTH_USER=&amp;#34;&amp;lt;User&amp;gt;&amp;#34;
PYROSCOPE_BASIC_AUTH_PASSWORD=&amp;#34;&amp;lt;Password&amp;gt;&amp;#34;
# PYROSCOPE_TENANT_ID=&amp;#34;&amp;lt;TenantID&amp;gt;&amp;#34; # For multi-tenant mode&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Replace placeholders accordingly. For sending data to Grafana, use your Grafana stack user and API key for authentication.&lt;/p&gt;
]]></content><description>&lt;h1 id="aws-lambda-profiling-extension">AWS Lambda profiling extension&lt;/h1>
&lt;p>The Pyroscope AWS Lambda extension is a robust tool for profiling AWS Lambda functions, ensuring minimal latency impact. This profiling is essential for optimizing your functions.&lt;/p></description></item><item><title>Pyroscope memory overhead</title><link>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/memory-overhead/</link><pubDate>Wed, 08 Apr 2026 14:38:28 +0000</pubDate><guid>https://grafana.com/docs/pyroscope/v1.18.x/configure-client/memory-overhead/</guid><content><![CDATA[&lt;h1 id=&#34;pyroscope-memory-overhead&#34;&gt;Pyroscope memory overhead&lt;/h1&gt;
&lt;p&gt;Pyroscope has very low memory overhead, usually less than 50 MB per pod.&lt;/p&gt;
&lt;h2 id=&#34;how-the-profiler-works&#34;&gt;How the profiler works&lt;/h2&gt;
&lt;p&gt;Stacktraces are captured at regular intervals (~100Hz).
Memory allocations and lock contention events are sampled.&lt;/p&gt;
&lt;p&gt;These stacktraces and memory allocation events are temporarily stored in memory.&lt;/p&gt;
&lt;p&gt;The stored profiling data is periodically (default is every 15 seconds) sent to the server.&lt;/p&gt;
&lt;p&gt;Memory overhead consists of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The temporary storage of profiles in memory is the primary contributor to memory overhead.&lt;/li&gt;
&lt;li&gt;Memory usage typically scales up sublinearly with the number of CPUs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-happens-if-the-pyroscope-backend-is-down&#34;&gt;What happens if the Pyroscope backend is down?&lt;/h2&gt;
&lt;p&gt;The guiding principle of Pyroscope clients is to never cause the user application to crash.&lt;/p&gt;
&lt;p&gt;Profiles are uploaded using multiple threads. The default value is &lt;code&gt;5&lt;/code&gt; and can be adjusted using the &lt;code&gt;Threads&lt;/code&gt; variable.&lt;/p&gt;
&lt;p&gt;If the backend is down or slow, the profiler discards new profiles to prevent running out of memory.&lt;/p&gt;
&lt;h2 id=&#34;real-world-example&#34;&gt;Real-world example&lt;/h2&gt;
&lt;p&gt;The exact overhead can vary based on the application, so direct testing is recommended.&lt;/p&gt;
&lt;p&gt;At Grafana Labs we continuously profile all of our workloads.
With all profiling types enabled (CPU, alloc, goroutine, mutex, block), the observed memory overhead per pod is typically less than 50 MB.&lt;/p&gt;
&lt;p&gt;The overhead is often so minimal that it becomes challenging to accurately measure.&lt;/p&gt;
]]></content><description>&lt;h1 id="pyroscope-memory-overhead">Pyroscope memory overhead&lt;/h1>
&lt;p>Pyroscope has very low memory overhead, usually less than 50 MB per pod.&lt;/p>
&lt;h2 id="how-the-profiler-works">How the profiler works&lt;/h2>
&lt;p>Stacktraces are captured at regular intervals (~100Hz).
Memory allocations and lock contention events are sampled.&lt;/p></description></item></channel></rss>