#profiler #pprof

pyroscope

Pyroscope 性能分析代理,用于持续分析 Rust、Python 和 Ruby 应用程序

12 个版本

0.5.7 2023 年 8 月 4 日
0.5.6 2023 年 5 月 19 日
0.5.5 2023 年 4 月 27 日
0.5.3 2022 年 6 月 27 日
0.1.0 2021 年 12 月 17 日

#24 in 性能分析

Download history 33902/week @ 2024-04-15 34292/week @ 2024-04-22 25988/week @ 2024-04-29 26034/week @ 2024-05-06 32886/week @ 2024-05-13 38747/week @ 2024-05-20 38410/week @ 2024-05-27 35008/week @ 2024-06-03 35965/week @ 2024-06-10 30181/week @ 2024-06-17 35572/week @ 2024-06-24 32522/week @ 2024-07-01 31477/week @ 2024-07-08 33117/week @ 2024-07-15 37726/week @ 2024-07-22 30179/week @ 2024-07-29

每月下载 133,377 次
9 个 crates(8 个直接) 中使用

Apache-2.0

145KB
3K SLoC

Rust 2.5K SLoC // 0.1% comments Python 325 SLoC // 0.0% comments Ruby 210 SLoC // 0.0% comments Jsonnet 73 SLoC Forge Config 73 SLoC Shell 58 SLoC // 0.2% comments Bazel 3 SLoC

Pyroscope 性能分析器

Pyroscope Rust 性能分析器。分析您的 Rust 应用程序。

license tests build Crate


您可能正在寻找

目录

快速开始

将其添加到您的 Cargo.toml

[dependencies]
pyroscope = "0.5.4"
pyroscope_pprofrs = "0.2"

包含 Pyroscope 和 pprof-rs 依赖项

use pyroscope::PyroscopeAgent;
use pyroscope_pprofrs::{pprof_backend, PprofConfig};

配置 Pyroscope 代理

 let agent =
     PyroscopeAgent::builder("https://127.0.0.1:4040", "myapp-profile")
     .backend(pprof_backend(PprofConfig::new().sample_rate(100)))
     .build()?;

分析您的代码

 let agent_running = agent.start()?;

 // Computation to profile 

 let agent_ready = agent_running.stop()?;
 agent_ready.shutdown();

Pyroscope 服务器

Pyroscope 代理将分析数据发送到 Pyroscope 服务器。您需要运行一个 Pyroscope 服务器来消费和可视化这些数据。目前无法将数据转发到另一个端点。

多线程

Pyroscope 代理和 pprof-rs 后端 可以分析并报告来自多线程程序的数据。然而,pprof-rs 不跟踪子进程,因此分析仅限于单个进程。

性能分析后端

Pyroscope 代理本身不执行任何分析。代理的角色是编排分析后端,并将分析数据报告给 Pyroscope 服务器。代理可以支持外部后端(实际上,所有当前后端都是独立的 crates),您也可以创建自己的后端。后端也可以单独使用。目前可用的后端有

原生集成

Pyroscope 可以通过原生集成直接从您的项目中使用。不需要代理或外部程序。

限制

  • 后端:Pyroscope 代理使用 pprof-rs 作为后端。因此,pprof-rs 的 限制 也适用于 Pyroscope。
  • 标记:从 0.5.0 版本开始,Pyroscope 代理支持线程内的标记。查看 标记多线程 示例以了解用法。
  • 计时器:需要 epoll(Linux)和 kqueue(macOS)以实现更精确的计时器。
  • 关闭:Pyroscope 代理可能需要一些时间(通常少于 10 秒)才能正确关闭并终止其线程。为了正确关闭,建议在删除代理之前运行 shutdown 函数。

获取帮助

您可以阅读 文档 或检查 示例 以了解库的详细用法。如果您有疑问,也可以加入 Slack 频道

主要贡献者

我们想向以下对项目做出重大贡献的贡献者表示衷心的感谢

许可协议

Pyroscope 根据 Apache 许可证(版本 2.0)分发。

有关详细信息,请参阅 许可证

依赖项

~6–21MB
~282K SLoC