benfred

py-spy

py-spy 是 Rust 编写的 Python 采样式性能分析器,无需重启或修改代码即可分析运行中的 Python 进程,可安全用于生产环境。

v0.4.2
发布于
2026年4月25日
15,588
星标
97,799
下载
同步于
8 天前

作者已不再通过 GitHub Release 发版,但仓库仍在更新(最近提交 13 天前)。最新版本请到官网获取:

最新版本

v0.4.22026年4月25日 06:08
下载慢?可在上方随时切换镜像源

项目说明

项目概述

py-spy 是一个针对 Python 程序的采样式性能分析器,用 Rust 编写,无需重启进程或修改任何代码即可查看程序时间花费在哪。它以极低开销运行在与目标进程分离的进程里,因此可以安全地分析生产环境的 Python 服务。支持生成火焰图、实时 top 视图与线程调用栈转储,覆盖 Linux、macOS、Windows 与 FreeBSD。

项目 内容
语言 Rust
类型 采样式 profiler
支持 CPython 2.3-2.7、3.3-3.15
许可 MIT

不重启、不改码,直接看清线上 Python 进程在忙什么。

主要功能

  • 火焰图录制:record 命令生成可交互的 SVG 火焰图
  • 实时 top:top 命令实时展示最耗时的函数
  • 栈转储:dump 命令输出各线程当前调用栈,排查卡死
  • 附加式分析:通过 PID 直接分析运行中的进程
  • 原生扩展分析:--native 支持 C/C++、Cython 扩展(部分平台)
  • 子进程分析:--subprocesses 一并分析子进程
  • GIL 过滤:可只采样持有 GIL 的线程
  • 多格式导出:支持 speedscope 与原始数据格式

适用人群

  • 后端开发者
  • SRE 与运维工程师
  • 排查线上性能问题的团队
  • 数据管道开发者
  • Python 服务负责人

快速上手

  1. 安装 py-spy
pip install py-spy
  1. 录制火焰图
py-spy record -o profile.svg --pid 12345
  1. 实时查看热点函数
py-spy top --pid 12345
  1. 程序卡死时转储调用栈
py-spy dump --pid 12345

核心优势

  • 生产安全:进程外采样、开销极低,不影响线上服务
  • 零侵入:不需要重启或修改被分析程序
  • 即装即用:pip、brew 等渠道都有预编译包

系统要求

项目 要求
操作系统 Linux、macOS、Windows、FreeBSD
支持解释器 CPython 2.3-2.7、3.3-3.15
权限 附加进程可能需要 root 或调试权限

注意事项

  • 平台差异:--native 原生扩展分析仅在部分平台可用
  • 符号建议:分析原生扩展时建议带符号编译以获得更好结果
  • 权限要求:附加生产进程通常需要相应系统权限

历史版本

排序