在CentOS系统中,Python性能监控与分析可通过系统级工具(监控资源占用)、代码级工具(定位代码瓶颈)和综合可视化工具(直观展示数据)三类方式实现。以下是具体方案:
系统级工具用于监控Python进程的CPU、内存、磁盘、网络等资源使用情况,帮助快速判断是否存在资源瓶颈。
psutil是跨平台Python库,可获取系统资源使用情况及进程详细信息,适合集成到Python代码中实现实时监控。
pip install psutilimport psutil
# CPU使用率(间隔1秒)
cpu_percent = psutil.cpu_percent(interval=1)
print(f"CPU使用率: {cpu_percent}%")
# 内存使用情况
memory = psutil.virtual_memory()
print(f"内存使用率: {memory.percent}%, 已用: {memory.used/(1024**3):.2f}GB")
# 磁盘使用情况(根分区)
disk = psutil.disk_usage('/')
print(f"磁盘使用率: {disk.percent}%, 已用: {disk.used/(1024**3):.2f}GB")
# 网络IO(发送/接收字节数)
net_io = psutil.net_io_counters()
print(f"网络发送: {net_io.bytes_sent/(1024**2):.2f}MB, 接收: {net_io.bytes_recv/(1024**2):.2f}MB")
Glances是基于psutil的跨平台系统监控工具,支持命令行实时监控和Web界面查看,功能覆盖CPU、内存、磁盘、网络、进程等。
# 安装EPEL仓库(若未安装)
sudo yum -y install epel-release
# 安装Glances
sudo yum -y install glances
glances(按q退出)glances -w(默认端口61208,浏览器访问http://服务器IP:61208)dstat是多功能系统资源统计工具,可实时显示CPU、内存、磁盘、网络等数据,支持模块化扩展(如添加MySQL、Redis监控插件)。
pip install dstat# 实时显示所有资源使用情况(每秒更新一次)
dstat -ta 1
vmstat、iostat等传统工具,提供更全面的资源监控。代码级工具用于深入分析Python代码的执行时间、内存占用,定位具体函数或代码行的性能瓶颈。
cProfile是Python内置的性能分析工具,可统计函数调用次数、耗时占比,适合开发阶段的全程序分析。
python -m cProfile -s cumulative your_script.py(按累计时间排序)python -m cProfile -o result.prof your_script.py(后续用工具分析)snakeviz可视化(pip install snakeviz):snakeviz result.prof # 浏览器打开交互式调用关系图
line_profiler可精确到代码行的耗时统计,适合分析单个函数内部的性能瓶颈(如循环、复杂计算)。
pip install line_profiler@profile装饰器:from line_profiler import LineProfiler
@profile
def slow_function():
total = 0
for i in range(100000):
total += i
return total
if __name__ == "__main__":
slow_function()
kernprof -l -v your_script.py(-l表示行级分析,-v显示结果)memory_profiler可跟踪函数执行过程中每行代码的内存变化,适合定位内存泄漏或高内存占用的代码。
pip install memory_profiler@profile装饰器:from memory_profiler import profile
@profile
def memory_intensive_function():
large_list = [i for i in range(1000000)] # 占用大量内存
return sum(large_list)
if __name__ == "__main__":
memory_intensive_function()
python -m memory_profiler your_script.pyPy-spy通过采样方式分析Python程序的运行状态,无需修改代码,适合生产环境中的性能分析(如多线程/多进程程序的CPU占用、GIL竞争)。
pip install py-spyPID为实际进程ID):py-spy record -o profile.svg --pid PID # 生成火焰图
py-spy top --pid PID(类似top命令)tracemalloc是Python 3.4+内置模块,可跟踪内存分配情况,对比不同时间点的内存状态,定位内存泄漏(如长时间运行后内存持续增长)。
import tracemalloc
tracemalloc.start() # 开始跟踪
snapshot1 = tracemalloc.take_snapshot() # 记录初始状态
# 执行可能泄漏内存的代码
def leaky_function():
large_list = [i for i in range(100000)]
return large_list
leaky_function()
snapshot2 = tracemalloc.take_snapshot() # 记录后续状态
top_stats = snapshot2.compare_to(snapshot1, 'lineno') # 对比差异
# 输出内存增长最多的前10行代码
for stat in top_stats[:10]:
print(stat)
综合工具可将性能数据转化为交互式图表,帮助快速理解性能趋势和瓶颈。
py-spy record生成火焰图(profile.svg),用snakeviz打开即可查看交互式调用关系图(点击节点可放大查看详情)。以上工具覆盖了CentOS环境下Python性能监控与分析的全链路需求:从系统资源监控到代码级瓶颈定位,再到可视化展示。可根据具体场景选择合适的工具组合(如开发阶段用cProfile+line_profiler,生产环境用Py-spy+Glances)。