
技术栈
技术解析和学习指南





py-spy
py-spy 是一个专为 Python 设计的采样型性能分析器(sampling profiler),它的主要作用是:
在不中断、无侵入、不修改代码的情况下,实时分析正在运行的 Python 程序的性能瓶颈!
核心用途
1. 实时性能分析
- 可以对“正在运行”的 Python 程序进行采样分析,无需重启、无需插桩。
- 支持抓取 CPU 占用高的代码片段,快速定位慢点、死循环、锁等待等问题。
2. 零侵入、无性能损耗
- 不需要在代码里加任何
import或装饰器,对性能影响极小(<1%)。 - 支持分析生产环境、Docker 容器、Kubernetes 等多种部署方式下的进程。
3. 多种可视化输出
- 支持生成火焰图(flamegraph)、Top 统计、原始采样数据等多种格式,便于分析和汇报。
常见用法举例
1. 分析指定进程的性能瓶颈
| |
- 实时显示当前最消耗 CPU 的函数调用栈。
2. 生成火焰图(Flamegraph)
| |
- 采样一段时间后,生成 SVG 格式的火焰图,直观展示各函数耗时比例。
3. 分析 Docker 容器里的 Python 程序
| |
典型应用场景
- 生产环境排查性能瓶颈:线上服务卡顿时,直接分析正在跑的进程,无需重启。
- 数据科学/AI训练任务:分析大规模数据处理、模型训练的慢点。
- 多线程/多进程程序:支持 GIL 监控,能看到线程切换和锁等待情况。
- 和 CI/CD、监控平台联动:自动抓取性能数据,生成历史趋势报告。
与其它分析器对比
| 工具 | 侵入性 | 性能损耗 | 支持生产环境 | 可视化能力 | 备注 |
|---|---|---|---|---|---|
| py-spy | 无 | 极低 | 强 | 强 | 推荐 |
| cProfile | 有 | 中 | 弱 | 一般 | 需改代码 |
| yappi | 有 | 低 | 一般 | 一般 | 需改代码 |
| perf | 无 | 极低 | 强 | 一般 | 需C扩展配合 |
脑洞扩展建议
AI驱动的自动瓶颈定位
结合 LLM 自动解读火焰图,给出优化建议、重构方案,甚至自动生成 PR。