温馨提示×

Python在CentOS怎样配置性能监控

小樊
31
2025-12-21 17:27:00
栏目: 编程语言

在 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 RelicSentryScout 等:自动采集 事务、慢请求、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 适合精准剖析;两者可结合使用。

0