如果你正在用 Python 开发一个运维监控工具,需要实时获取 CPU、内存、磁盘、网络等系统指标,那么 psutil 这个库绝对值得深入了解。它提供了一个强大且统一的 API,让你无需依赖各平台不同的命令行工具,就能轻松完成系统监控任务。
什么是 psutil?
psutil 的全称是 Process and System Utilities。它是一个跨平台的 Python 库,其核心目标是将在 UNIX/Linux 系统中常用的命令如 ps、top、free、netstat、iostat、lsof 等功能,封装成一套简洁的 Python API。
它支持包括 Linux、Windows、macOS、各种 BSD、Solaris、AIX 在内的主流操作系统,并且兼容 Python 3.6+ 及 PyPy。
它能解决哪些实际问题?
- 统一监控接口:无需再为不同平台编写不同的系统命令调用逻辑,一套代码即可兼容多系统。
- 实时数据获取:轻松获取 CPU 使用率、内存占用、磁盘 IO、网络流量等指标的实时快照。
- 进程管理:可以枚举、查询进程信息,以及终止进程、调整进程优先级等。
- 无侵入部署:只需通过
pip 安装,无需在目标系统上安装额外的监控代理或复杂软件。
- 丰富的信息维度:除了基础资源,还能获取传感器温度、电池状态(如笔记本)、启动时间等深度信息。
核心功能代码示例
下面通过几个典型场景的代码,快速展示 psutil 的基本用法。
import psutil, time
# 1. 获取 CPU 利用率
print("CPU 总使用率:", psutil.cpu_percent(interval=1), "%")
print("每个核的使用率:", psutil.cpu_percent(interval=1, percpu=True))
# 2. 获取内存使用状况
mem = psutil.virtual_memory()
print(f"总内存 {mem.total/1e9:.2f} GB,已用 {mem.used/1e9:.2f} GB,可用 {mem.available/1e9:.2f} GB")
# 3. 计算磁盘 IO(读写速度)
io1 = psutil.disk_io_counters()
time.sleep(1)
io2 = psutil.disk_io_counters()
print("1 秒内读写:", (io2.read_bytes-io1.read_bytes)/1024, "KB 读|",
(io2.write_bytes-io1.write_bytes)/1024, "KB 写")
# 4. 计算网络流量(收发速度)
net1 = psutil.net_io_counters()
time.sleep(1)
net2 = psutil.net_io_counters()
print("1 秒内发包:", (net2.bytes_sent-net1.bytes_sent)/1024, "KB | 收包:", (net2.bytes_recv-net1.bytes_recv)/1024, "KB")
优缺点分析
在实际的Python开发和运维工作中,了解一个工具的边界同样重要。
| 优点 |
缺点 |
| 强大的跨平台支持 |
部分高级功能(如特定传感器数据)可能只在特定系统(如Linux/Windows)上可用 |
| API 设计直观简洁 |
返回的数据结构信息非常丰富,对于初学者来说可能需要时间熟悉 |
| 无需外部系统依赖 |
在需要极高频率(如毫秒级)采样的场景下,本身可能引入微小性能开销 |
| 社区活跃,文档齐全 |
在 Windows 系统下,对服务(Services)的管理和某些需要特殊权限的操作稍显复杂 |
总结与实践建议
psutil 最大的优势在于其“一站式”的解决方案。从基础的进程、CPU、内存、硬盘、网络监控,到风扇温度、电池续航等硬件信息,都能通过一套统一的 API 获取。这使得它非常适合用于构建自动化监控脚本、进行应用性能剖析、或实现资源使用限制等功能。
在使用时有一个细节需要注意:尽量避免使用类似 psutil.cpu_percent(interval=0) 这样的高频即时采样调用,因为这可能会将监控脚本自身的计算开销也统计进去。更佳实践是采用定时采样的方式,例如设置 interval=1 来获取过去1秒内的平均利用率。
对于从事运维监控、性能分析,或需要在业务逻辑中嵌入系统状态检查的开发者而言,psutil 是一个不可或缺的工具。结合简单的数据可视化(如使用 matplotlib 或 Web 框架),你可以快速搭建起一个轻量级的系统监控面板,这远比手动执行命令或编写复杂的 shell 脚本要高效和可靠得多。
项目官方地址:https://github.com/giampaolo/psutil
如果你想探索更多Python在自动化运维中的应用,或者与其他开发者交流监控实践,可以到云栈社区的相关板块进行讨论。