Ubuntu 下 Python 性能监控与调优实战指南
一 监控与剖析总览
| 层面 | 工具 | 主要用途 | 典型命令或用法 |
|---|---|---|---|
| 系统级 | top/htop | 实时查看进程 CPU/内存 占用 | htop |
| 系统级 | psutil | 在代码中采集进程 CPU、内存、I/O 等指标 | psutil.Process().cpu_percent()、memory_info().rss |
| CPU 剖析 | cProfile | 函数粒度统计,定位热点函数 | python -m cProfile -o out.prof app.py |
| CPU 采样 | py-spy | 非侵入式采样,生成火焰图 | py-spy top --pid <PID>;py-spy record -o profile.svg --pid <PID> |
| 逐行 CPU | line_profiler | 逐行耗时,精确定位慢行 | @profile + kernprof -l -v app.py |
| 内存剖析 | memory_profiler | 逐行内存分配与峰值 | @profile + python -m memory_profiler app.py |
| 内存追踪 | tracemalloc | 追踪对象分配栈,定位内存增长来源 | tracemalloc.start(); ...; snapshot = tracemalloc.take_snapshot() |
| 可视化 | snakeviz | 可视化 cProfile 结果 | snakeviz out.prof |
| 负载与压力 | Locust | 模拟并发用户,做接口/服务压测 | locust -f locustfile.py |
| 上述工具覆盖了从系统到代码、从 CPU 到内存、从统计到采样的完整链路,适合在 Ubuntu 上系统化定位与优化性能瓶颈。 |
二 CPU 与热点定位
htop 观察目标进程的 CPU% 与线程数;必要时 strace -p <PID> -c 粗略看系统调用耗时分布。python -m cProfile -o profile.prof app.pypython -m pstats profile.prof → sort_stats('cumtime').print_stats(20)snakeviz profile.prof,直观查看调用关系与耗时占比。py-spy top --pid <PID>py-spy record -o profile.svg --pid <PID>,在浏览器中分析热点调用栈。pip install line_profiler@profile,运行 kernprof -l -v app.py,查看逐行耗时与命中次数。三 内存与对象分配分析
pip install memory_profiler@profile,运行 python -m memory_profiler app.py,关注 增量 MB 与峰值行。tracemalloc.start()snapshot = tracemalloc.take_snapshot()snapshot.statistics('lineno'),定位到文件与行号。proc = psutil.Process()rss_before = proc.memory_info().rssrss_after = proc.memory_info().rss四 常见瓶颈与优化策略
@jit(nopython=True) 加速。五 实操流程与注意事项
time 或 pytest-benchmark 建立基准;htop/psutil 观察资源使用。