一、简介
psutil(Process and System Utilities)是Python中最强大的系统监控和进程管理库之一。它提供了跨平台的系统信息获取接口,
能够轻松获取系统的CPU、内存、磁盘、网络等硬件信息,以及进程管理、系统监控等功能。无论是开发运维工具、系统监控程序,还是性能分析应用,psutil都是不可或缺的利器
该库支持Linux、Windows、macOS等主流操作系统,为开发者提供了统一的API接口,大大简化了系统编程的复杂度。
核心特性:
- 跨平台支持:支持Linux、Windows、macOS、FreeBSD等操作系统
- 丰富的系统信息:获取CPU、内存、磁盘、网络等硬件信息
- 进程管理:创建、终止、监控进程及其子进程
- 实时监控:提供实时的系统资源使用情况
- 网络连接监控:查看网络连接状态和统计信息
- 用户会话管理:获取当前登录用户信息
- 高性能:底层使用C语言实现,性能优异
二、安装
pip install psutil#验证
import psutil
print(f"psutil版本: {psutil.__version__}")
print(f"CPU核心数: {psutil.cpu_count()}")
三、基本功能
1.获取CPU信息
CPU使用率是系统监控中最重要的指标之一,psutil提供了多种方式获取CPU信息,包括总体使用率、各核心使用率、CPU频率等。通过这些信息可以实时了解系统负载情况,为性能优化提供数据支撑。
import psutil
import time# 获取CPU使用率
cpu_percent = psutil.cpu_percent(interval=1)
print(f"CPU总使用率: {cpu_percent}%")# 获取各核心使用率
cpu_per_core = psutil.cpu_percent(interval=1, percpu=True)
for i, usage in enumerate(cpu_per_core):
print(f"核心{i}: {usage}%")# 获取CPU频率信息
cpu_freq = psutil.cpu_freq()
print(f"CPU频率: {cpu_freq.current:.2f}MHz")
2.获取内存信息
psutil可以获取物理内存和虚拟内存的详细信息,包括总量、已用量、可用量等。
# 获取内存信息
memory = psutil.virtual_memory()
print(f"总内存: {memory.total / (1024**3):.2f}GB")
print(f"已用内存: {memory.used / (1024**3):.2f}GB")
print(f"内存使用率: {memory.percent}%")# 获取交换分区信息
swap = psutil.swap_memory()
print(f"交换分区总量: {swap.total / (1024**3):.2f}GB")
print(f"交换分区使用率: {swap.percent}%")
3.获取磁盘信息
psutil能够获取各个磁盘分区的使用情况,包括总容量、已用空间、可用空间等,帮助管理员及时发现磁盘空间不足的问题。
# 获取磁盘分区信息
partitions = psutil.disk_partitions()
for partition in partitions:
print(f"设备: {partition.device}")
try:
partition_usage = psutil.disk_usage(partition.mountpoint)
print(f" 总容量: {partition_usage.total / (1024**3):.2f}GB")
print(f" 已使用: {partition_usage.used / (1024**3):.2f}GB")
print(f" 使用率: {partition_usage.percent}%")
except PermissionError:
print(" 权限不足")
四、高级功能
1.进程管理与监控
psutil提供了强大的进程管理功能,可以获取系统中所有进程的详细信息,包括进程ID、名称、CPU和内存使用率、父子进程关系等。
# 获取当前进程信息
current_process = psutil.Process()
print(f"当前进程PID: {current_process.pid}")
print(f"进程名称: {current_process.name()}")
print(f"CPU使用率: {current_process.cpu_percent()}%")
print(f"内存使用: {current_process.memory_info().rss / (1024**2):.2f}MB")# 遍历所有进程
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']):
if proc.info['cpu_percent'] > 10: # 只显示CPU使用率大于10%的进程
print(f"PID: {proc.info['pid']}, 名称: {proc.info['name']}, "
f"CPU: {proc.info['cpu_percent']}%, 内存: {proc.info['memory_percent']:.2f}%")
2.网络连接监控
网络监控功能可以帮助管理员了解系统的网络使用情况,包括网络接口流量统计、当前网络连接状态等。
# 获取网络接口统计信息
net_io = psutil.net_io_counters(pernic=True)
for interface, stats in net_io.items():
print(f"接口 {interface}:")
print(f" 发送: {stats.bytes_sent / (1024**2):.2f}MB")
print(f" 接收: {stats.bytes_recv / (1024**2):.2f}MB")# 获取网络连接信息
connections = psutil.net_connections()
for conn in connections[:5]: # 只显示前5个连接
print(f"连接: {conn.laddr} -> {conn.raddr}, 状态: {conn.status}")
五、实际应用场景
1.系统监控脚本
在实际工作中,经常需要编写系统监控脚本来实时监控服务器状态。以下是一个综合的系统监控示例,可以用于服务器健康检查和预警系统。
import psutil
import time
import smtplib
from datetime import datetimedef system_monitor():
"""系统监控函数"""
# 设置阈值
CPU_THRESHOLD = 80
MEMORY_THRESHOLD = 85
DISK_THRESHOLD = 90
# 获取系统信息
cpu_usage = psutil.cpu_percent(interval=1)
memory_usage = psutil.virtual_memory().percent
disk_usage = psutil.disk_usage('/').percent
# 检查是否超过阈值
alerts = []
if cpu_usage > CPU_THRESHOLD:
alerts.append(f"CPU使用率过高: {cpu_usage}%")
if memory_usage > MEMORY_THRESHOLD:
alerts.append(f"内存使用率过高: {memory_usage}%")
if disk_usage > DISK_THRESHOLD:
alerts.append(f"磁盘使用率过高: {disk_usage}%")
# 记录日志
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_info = f"[{timestamp}] CPU: {cpu_usage}%, 内存: {memory_usage}%, 磁盘: {disk_usage}%"
print(log_info)
if alerts:
print("警告:", "; ".join(alerts))
return alerts# 持续监控
whileTrue:
system_monitor()
time.sleep(60) # 每分钟检查一次
2.进程管理工具
在多进程应用中,需要监控和管理子进程的状态。以下示例展示了如何使用psutil来监控特定进程的资源使用情况,并在必要时进行进程管理操作。
def monitor_process_by_name(process_name):
"""根据进程名监控进程"""
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']):
if process_name.lower() in proc.info['name'].lower():
memory_mb = proc.info['memory_info'].rss / (1024**2)
print(f"进程: {proc.info['name']}")
print(f"PID: {proc.info['pid']}")
print(f"CPU: {proc.info['cpu_percent']}%")
print(f"内存: {memory_mb:.2f}MB")
# 如果内存使用超过1GB,发出警告
if memory_mb > 1024:
print("警告:该进程内存使用过高!")# 监控Python进程
monitor_process_by_name("python")
总结
psutil作为Python生态系统中最优秀的系统监控库,为开发者提供了全面而强大的系统信息获取和进程管理功能。通过本文的介绍,我们了解了psutil的核心特性、基本使用方法以及高级功能应用。无论是简单的系统信息查询,还是复杂的服务器监控系统开发,psutil都能胜任。其跨平台的特性使得代码具有良好的可移植性,统一的API接口大大降低了学习成本。在实际项目中,合理运用psutil可以帮助我们构建高效的监控系统、性能分析工具和自动化运维脚本,显著提升系统管理的效率和质量。
Github地址:https://github.com/giampaolo/psutil
抄自于:https://mp.weixin.qq.com/s/6AA4_4x2R9CPXuxcIRKFhQ