1 分钟阅读

py-spy

py-spy 是一个专为 Python 设计的采样型性能分析器(sampling profiler),它的主要作用是:

在不中断、无侵入、不修改代码的情况下,实时分析正在运行的 Python 程序的性能瓶颈!

核心用途

1. 实时性能分析

  • 可以对“正在运行”的 Python 程序进行采样分析,无需重启、无需插桩。
  • 支持抓取 CPU 占用高的代码片段,快速定位慢点、死循环、锁等待等问题。

2. 零侵入、无性能损耗

  • 不需要在代码里加任何import装饰器,对性能影响极小(<1%)。
  • 支持分析生产环境、Docker 容器、Kubernetes 等多种部署方式下的进程。

3. 多种可视化输出

  • 支持生成火焰图(flamegraph)、Top 统计、原始采样数据等多种格式,便于分析和汇报。

常见用法举例

1. 分析指定进程的性能瓶颈

1
py-spy top --pid 12345
  • 实时显示当前最消耗 CPU 的函数调用栈。

2. 生成火焰图(Flamegraph)

1
py-spy record -o profile.svg --pid 12345
  • 采样一段时间后,生成 SVG 格式的火焰图,直观展示各函数耗时比例。

3. 分析 Docker 容器里的 Python 程序

1
2
3
docker run --rm -it --pid=host --privileged \
    -v /tmp:/tmp your-python-app
py-spy top --pid <容器内Python进程号>

典型应用场景

  • 生产环境排查性能瓶颈:线上服务卡顿时,直接分析正在跑的进程,无需重启。
  • 数据科学/AI训练任务:分析大规模数据处理、模型训练的慢点。
  • 多线程/多进程程序:支持 GIL 监控,能看到线程切换和锁等待情况。
  • 和 CI/CD、监控平台联动:自动抓取性能数据,生成历史趋势报告。

与其它分析器对比

工具侵入性性能损耗支持生产环境可视化能力备注
py-spy极低推荐
cProfile一般需改代码
yappi一般一般需改代码
perf极低一般需C扩展配合

脑洞扩展建议

  1. AI驱动的自动瓶颈定位
    结合 LLM 自动解读火焰图,给出优化建议、重构方案,甚至自动生成 PR。

  2. 与APM/监控平台集成
    实现性能异常时自动触发 py-spy 采样,采样结果推送到 Prometheus/Grafana 可视化。

  3. 云原生环境下的全自动分析
    支持 Kubernetes 集群自动发现所有 Python Pod,批量分析并聚合火焰图。

  4. 代码热修复联动
    采样到性能热点后,自动切换到优化版代码路径,实现“自愈”Python 服务。

  5. 语音播报性能热点
    结合 TTS,定时播报“鹏哥,data_loader.py第42行又炸了!”

分享这篇文章