在 CentOS 上配置 Python 性能监控
一 系统级监控与快速排查
- 安装系统监控工具包:执行 sudo yum install -y sysstat,用于采集 CPU、内存、I/O 等历史与实时指标。常用命令:
- 实时查看 CPU:top(按 P 按 CPU 排序,按 M 按内存排序)
- 历史与实时 CPU:sar -u 1
- 查看进程资源:top/htop(如未安装 htop,可用 yum install htop)
- 快速定位 Python 进程:
- 查找进程:ps -ef | grep python
- 实时观察:top -p
- 查看更细的 CPU/内存占用:pidstat -u -p 1、pidstat -r -p 1
- 说明:这些命令无需改动应用代码,适合线上快速排查与基线建立。
二 在 Python 应用内采集指标
- 使用 psutil 采集进程与应用指标(推荐零侵入、易集成):
- 安装:pip install psutil
- 示例:获取当前进程 CPU% 与 RSS 内存(MB)
- import os, psutil
- pid = os.getpid()
- cpu = psutil.cpu_percent(interval=1)
- mem_mb = psutil.Process(pid).memory_info().rss / 1024 / 1024
- print(f"CPU: {cpu}%, MEM: {mem_mb:.2f} MB")
- 可扩展采集:磁盘 IO、网络 IO、线程数、打开文件数等,用于自定义监控与告警。
三 暴露指标并用 Prometheus + Grafana 可视化
- 应用侧暴露指标:使用 prometheus_client 在应用内启动指标端点
- 安装:pip install prometheus_client
- 示例(Flask):
- from flask import Flask
- from prometheus_client import start_http_server, Counter
- app = Flask(name); requests_total = Counter(‘requests_total’,‘Total HTTP requests’)
- @app.route(‘/’)
- def hello(): requests_total.inc(); return “Hello”
- if name == ‘main’: start_http_server(5000); app.run(host=‘0.0.0.0’, port=8000)
- 部署建议:
- 生产环境用 Gunicorn/Uvicorn 多进程时,每个 worker 都会暴露 /metrics,Prometheus 自动抓取即可
- 反向代理(Nginx)暴露 /metrics 与业务端口,注意访问控制
- 可视化与告警:
- Prometheus 配置 scrape 抓取应用 :5000/metrics
- Grafana 导入官方 Python/Flask 仪表盘或自定义图表,配置阈值告警(如 CPU > 80%、5xx 错误率 等)
四 生产级 APM 与错误追踪
- 第三方 APM(应用性能监控)与错误追踪可补充代码级可观测性:
- New Relic、Sentry、Scout 等:自动采集 事务、慢请求、SQL/模板、异常堆栈,提供 Dashboard/告警
- 适用场景:需要快速上线、少维护、深度追踪函数/数据库性能时优先考虑托管服务。
五 性能剖析与热点定位
- 低开销采样分析:使用 py-spy(无需修改代码、对线上影响小)
- 安装:pip install py-spy
- 常用:
- 查看热点函数:py-spy top --pid
- 生成火焰图:py-spy record -o profile.svg --pid
- 多线程:py-spy top --pid --threads
- 内置剖析:使用 cProfile 定位函数级耗时(适合测试/预发环境)
- 示例:python -m cProfile -o profile.prof myapp.py
- 可用 flameprof/snakeviz 可视化结果
- 说明:py-spy 适合线上采样,cProfile 适合精准剖析;两者可结合使用。