[![Go Tests Status](https://github.com/grafana/pyroscope/workflows/Go%20Tests/badge.svg)](https://github.com/grafana/pyroscope/actions?query=workflow%3AGo%20Tests) [![JS Tests Status](https://github.com/grafana/pyroscope/workflows/JS%20Tests/badge.svg)](https://github.com/grafana/pyroscope/actions?query=workflow%3AJS%20Tests) [![Go Report](https://goreportcard.com/badge/github.com/grafana/pyroscope)](https://goreportcard.com/report/github.com/grafana/pyroscope) [![License: AGPLv3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](LICENSE) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fgrafana%2Fpyroscope.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fgrafana%2Fpyroscope?ref=badge_shield) [![Latest release](https://img.shields.io/github/release/grafana/pyroscope.svg)](https://github.com/grafana/pyroscope/releases) [![DockerHub](https://img.shields.io/docker/pulls/pyroscope/pyroscope.svg)](https://hub.docker.com/r/pyroscope/pyroscope) [![GoDoc](https://godoc.org/github.com/grafana/pyroscope?status.svg)](https://godoc.org/github.com/grafana/pyroscope) ### News On 2023-03-15, [Grafana Labs acquired Pyroscope](https://grafana.com/blog/2023/03/15/pyroscope-grafana-phlare-join-for-oss-continuous-profiling/). The teams and codebases of both [Grafana Phlare](https://github.com/grafana/phlare) and [Pyroscope](https://github.com/pyroscope-io/pyroscope) are **merging into [Grafana Pyroscope](https://github.com/grafana/pyroscope)**. Grafana Pyroscope is a new project. It will take some time to merge codebases and get to the first release. Feel free to use the information from the original Pyroscope project until that time. ### What is Grafana Pyroscope? Grafana Pyroscope is an open source continuous profiling platform. It will help you: * Find performance issues and bottlenecks in your code * Use high-cardinality tags/labels to analyze your application * Resolve issues with high CPU utilization * Track down memory leaks * Understand the call tree of your application * Auto-instrument your code to link profiling data to traces ## 🔥 [Pyroscope Live Demo](https://demo.pyroscope.io/?name=hotrod.python.frontend%7B%7D) 🔥 [![Pyroscope GIF Demo](https://user-images.githubusercontent.com/23323466/143324845-16ff72df-231e-412d-bd0a-38ef2e09cba8.gif)](https://demo.pyroscope.io/) ## Features * Minimal CPU overhead * Efficient compression, low disk space requirements * Can handle high-cardinality tags/labels * Calculate the performance "diff" between various tags/labels and time periods * Can store years of profiling data from multiple applications * Advanced analysis UI ## Add Pyroscope Server locally in 2 steps: Pyroscope supports all major architectures and is very easy to install. For example, here is how you install on a mac: ```shell # install pyroscope brew install pyroscope-io/brew/pyroscope # start pyroscope server: pyroscope server ``` ## Send data to server via Pyroscope agent (language specific) For more documentation on how to add the Pyroscope agent to your code, see the [agent documentation](https://pyroscope.io/docs/agent-overview) on our website or find language specific examples and documentation below:

Golang

Documentation
Examples

Java

Documentation
Examples

Python

Documentation
Examples

Ruby

Documentation
Examples

Rust

Documentation
Examples

NodeJS

Documentation
Examples

Dotnet

Documentation
Examples

eBPF

Documentation
Examples

PHP

Documentation
Examples

Grafana

Documentation
Examples
## Deployment Diagram ![agent_server_diagram_11-01](https://user-images.githubusercontent.com/23323466/178165230-a94e1ee2-9725-4752-97ff-542158d1b703.svg) ## Third-Party Integrations Pyroscope also supports several third-party integrations notably: - [Grafana Plugin](https://github.com/grafana/pyroscope/tree/main/examples/grafana-integration) - [Jaeger UI](https://github.com/pyroscope-io/jaeger-ui) - [OTel Golang (tracing)](https://github.com/pyroscope-io/otel-profiling-go) - [AWS Lambda Extension](https://pyroscope.io/docs/aws-lambda) ## Documentation For more information on how to use Pyroscope with other programming languages, install it on Linux, or use it in production environment, check out our documentation: * [Public Roadmap](https://github.com/grafana/pyroscope/projects/1) * [Getting Started](https://pyroscope.io/docs/) * [Deployment Guide](https://pyroscope.io/docs/deployment) * [Developer Guide](https://pyroscope.io/docs/developer-guide) ## Downloads You can download the latest version of pyroscope for macOS, linux and Docker from our [Downloads page](https://pyroscope.io/downloads/). ## Supported Integrations * [x] Go (via `pprof`) * [x] Python (via `py-spy`) * [x] Ruby (via `rbspy`) * [x] Linux eBPF (via `profile.py` from `bcc-tools`) * [x] Java (via `async-profiler`) * [x] Rust (via `pprof-rs`) * [x] .NET (via `dotnet trace`) * [x] PHP (via `phpspy`) * [x] Node Let us know what other integrations you want to see in [our issues](https://github.com/grafana/pyroscope/issues?q=is%3Aissue+is%3Aopen+label%3Anew-profilers) or in [our slack](https://pyroscope.io/slack). ## Credits Pyroscope is possible thanks to the excellent work of many people, including but not limited to: * Brendan Gregg — inventor of Flame Graphs * Julia Evans — creator of rbspy — sampling profiler for Ruby * Vladimir Agafonkin — creator of flamebearer — fast flamegraph renderer * Ben Frederickson — creator of py-spy — sampling profiler for Python * Adam Saponara — creator of phpspy — sampling profiler for PHP * Alexei Starovoitov, Brendan Gregg, and many others who made BPF based profiling in Linux kernel possible * Jamie Wong — creator of speedscope — interactive flamegraph visualizer ## Contributing To start contributing, check out our [Contributing Guide](CONTRIBUTING.md) ### Thanks to the contributors of Pyroscope! [//]: contributor-faces [//]: contributor-faces