Python系统监控利器:psutil库详解与实战(2026-07-08)
你是否曾遇到服务器突然卡顿,却不知是CPU飙高还是内存告急?或者你想用几行Python代码,就实时获取系统的CPU、内存、磁盘、网络甚至进程信息?psutil(Python System and Process Utilities)就是为此而生的瑞士军刀。
为什么psutil是系统监控的首选?
psutil是一个跨平台库,支持Windows、Linux、macOS,只需一个pip install psutil即可安装。它能让你像Linux的top命令一样,以编程方式获取系统的每一个细节。
核心能力一览
- CPU:获取使用率、核心数、频率、负载
- 内存:物理内存和交换内存的使用情况
- 磁盘:分区信息、读写速率、IO统计
- 网络:发送/接收字节数、连接数、接口详情
- 进程:列出所有进程、占用资源、杀死进程
实战:5分钟搭建系统监控脚本
让我们写一个实际可用的监控脚本,每5秒输出CPU、内存和磁盘状态。
第一步:获取基础信息
import psutil
# CPU使用率(每秒采样一次)
cpu_percent = psutil.cpu_percent(interval=1)
print(f"CPU使用率: {cpu_percent}%")
# 内存使用情况
mem = psutil.virtual_memory()
print(f"内存使用率: {mem.percent}% | 已用: {mem.used / 1e9:.2f}GB / 总计: {mem.total / 1e9:.2f}GB")
第二步:监控磁盘IO和网络流量
# 磁盘读写速率(需要两次采样计算差值)
disk_io_before = psutil.disk_io_counters()
time.sleep(1)
disk_io_after = psutil.disk_io_counters()
read_speed = (disk_io_after.read_bytes - disk_io_before.read_bytes) / 1024 # KB/s
write_speed = (disk_io_after.write_bytes - disk_io_before.write_bytes) / 1024
print(f"磁盘读速: {read_speed:.1f} KB/s | 写速: {write_speed:.1f} KB/s")
第三步:自动告警逻辑
def check_thresholds():
cpu = psutil.cpu_percent()
mem = psutil.virtual_memory().percent
if cpu > 80:
print(f"⚠️ CPU告警: {cpu}% 超过阈值80%")
if mem > 90:
print(f"⚠️ 内存告警: {mem}% 超过阈值90%")
实用建议:将上述代码封装成函数,配合
time.sleep(5)循环运行,就能得到一个迷你监控面板。如果想保存数据,可以写入CSV文件或发送到日志系统。
进阶:进程级监控
psutil还能让你看到具体是哪个进程在吃资源:
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']):
if proc.info['cpu_percent'] > 10:
print(f"PID {proc.info['pid']}: {proc.info['name']} - CPU {proc.info['cpu_percent']}%")
典型应用场景:
- 服务器运维:自动检测高CPU/内存进程并发送通知
- 性能调优:分析应用对系统资源的实时影响
- 日志审计:定期记录系统资源快照,用于事后排查
行动号召
现在就去试试吧!打开终端,pip install psutil后复制上面的代码运行。你会发现,系统监控从未如此简单。如果你已经熟悉基础用法,不妨挑战一下:结合schedule库实现定时任务,或者用matplotlib实时绘制资源曲线。
免责声明
本文提供的代码和示例仅用于学习和实验目的。在生产环境中使用前,请充分测试以确保不会影响系统稳定性或造成性能负担。作者不对因使用本文内容导致的任何直接或间接损失承担责任。系统监控涉及隐私和权限问题,请遵守相关法律法规。