当前位置:首页 > Python > 正文

Python psutil库教程:系统监控与进程管理工具详解

Python psutil库教程:系统监控与进程管理

全面掌握系统资源监控与进程管理技术

什么是psutil?

psutil(process and system utilities)是一个跨平台库,用于在Python中检索有关运行进程系统利用率 (CPU、内存、磁盘、网络、传感器)的信息。它主要用于系统监控、分析和限制进程资源以及管理正在运行的进程。

主要特性:

  • 跨平台支持:Windows, Linux, macOS, FreeBSD等
  • 系统信息获取:CPU、内存、磁盘、网络、传感器数据
  • 进程管理:进程信息获取、进程管理、资源限制
  • 用户友好:简单易用的API,丰富的文档
  • 高效性能:使用原生系统API实现,性能优异

安装psutil

使用pip可以轻松安装psutil:

# 安装最新版本的psutil
pip install psutil

# 安装指定版本
pip install psutil==5.9.0

核心功能与示例

1. CPU信息获取

使用psutil可以轻松获取CPU相关信息,包括使用率、核心数、频率等。

import psutil

# 获取CPU逻辑核心数量
print(f"逻辑CPU数量: {psutil.cpu_count()}")

# 获取CPU物理核心数量
print(f"物理CPU数量: {psutil.cpu_count(logical=False)}")

# 获取CPU当前使用率
print(f"当前CPU使用率: {psutil.cpu_percent(interval=1)}%")

# 获取每个CPU核心的使用率
print(f"每个核心使用率: {psutil.cpu_percent(interval=1, percpu=True)}")

# 获取CPU频率信息
freq = psutil.cpu_freq()
print(f"当前频率: {freq.current}MHz, 最小频率: {freq.min}MHz, 最大频率: {freq.max}MHz")

2. 内存信息获取

psutil提供了详细的内存使用情况,包括物理内存和交换空间。

import psutil

# 获取物理内存信息
mem = psutil.virtual_memory()
print(f"总内存: {mem.total / (1024**3):.2f} GB")
print(f"已用内存: {mem.used / (1024**3):.2f} GB")
print(f"内存使用率: {mem.percent}%")

# 获取交换内存信息
swap = psutil.swap_memory()
print(f"交换空间总量: {swap.total / (1024**3):.2f} GB")
print(f"交换空间使用率: {swap.percent}%")

3. 磁盘信息获取

使用psutil可以监控磁盘分区、使用情况和IO统计信息。

import psutil

# 获取磁盘分区信息
partitions = psutil.disk_partitions()
for partition in partitions:
    print(f"设备: {partition.device}, 挂载点: {partition.mountpoint}, 文件系统: {partition.fstype}")

# 获取磁盘使用情况
disk_usage = psutil.disk_usage('/')
print(f"磁盘总空间: {disk_usage.total / (1024**3):.2f} GB")
print(f"已用空间: {disk_usage.used / (1024**3):.2f} GB")
print(f"空闲空间: {disk_usage.free / (1024**3):.2f} GB")
print(f"使用率: {disk_usage.percent}%")

# 获取磁盘IO统计
disk_io = psutil.disk_io_counters()
print(f"读取次数: {disk_io.read_count}, 写入次数: {disk_io.write_count}")
print(f"读取字节: {disk_io.read_bytes / (1024**2):.2f} MB")
print(f"写入字节: {disk_io.write_bytes / (1024**2):.2f} MB")

4. 网络信息获取

psutil可以监控网络接口、连接状态和带宽使用情况。

import psutil

# 获取网络接口信息
net_io = psutil.net_io_counters()
print(f"发送字节数: {net_io.bytes_sent / (1024**2):.2f} MB")
print(f"接收字节数: {net_io.bytes_recv / (1024**2):.2f} MB")

# 获取网络接口详情
addrs = psutil.net_if_addrs()
for interface_name, interface_addresses in addrs.items():
    for address in interface_addresses:
        print(f"接口: {interface_name}, IP地址: {address.address}")

# 获取当前网络连接
connections = psutil.net_connections(kind='inet')
for conn in connections[:5]:  # 只显示前5个连接
    print(f"协议: {conn.type}, 本地地址: {conn.laddr}, 远程地址: {conn.raddr}, 状态: {conn.status}")

5. 进程管理

psutil的核心功能之一是进程管理,可以获取进程信息、管理进程状态。

import psutil

# 获取所有进程ID
pids = psutil.pids()
print(f"系统进程数量: {len(pids)}")

# 获取前5个进程信息
for proc in psutil.process_iter(['pid', 'name', 'username'])[:5]:
    print(proc.info)

# 获取特定进程的详细信息
pid = psutil.pids()[0]  # 获取第一个进程
p = psutil.Process(pid)
print(f"进程ID: {p.pid}")
print(f"进程名称: {p.name()}")
print(f"进程状态: {p.status()}")
print(f"创建时间: {p.create_time()}")
print(f"CPU使用率: {p.cpu_percent(interval=0.1)}%")
print(f"内存使用: {p.memory_info().rss / (1024**2):.2f} MB")
print(f"打开的文件: {p.open_files()}")
print(f"关联的网络连接: {p.connections()}")

# 终止进程
# p.terminate()  # 终止进程
# p.kill()       # 强制终止进程

6. 系统信息

psutil还可以获取其他系统信息,如启动时间、登录用户等。

import psutil
from datetime import datetime

# 获取系统启动时间
boot_time = psutil.boot_time()
print(f"系统启动时间: {datetime.fromtimestamp(boot_time).strftime('%Y-%m-%d %H:%M:%S')}")

# 获取登录用户
users = psutil.users()
for user in users:
    print(f"用户名: {user.name}, 终端: {user.terminal}, 登录时间: {datetime.fromtimestamp(user.started).strftime('%Y-%m-%d %H:%M:%S')}")

# 获取系统平均负载(仅Linux/Unix)
if hasattr(psutil, "getloadavg"):
    load_avg = psutil.getloadavg()
    print(f"系统平均负载(1min, 5min, 15min): {load_avg}")

# 获取电池状态(如果可用)
battery = psutil.sensors_battery()
if battery:
    print(f"电池电量: {battery.percent}%, 是否充电: {battery.power_plugged}")

实际应用场景

psutil库在实际开发中有广泛应用,例如:

  • 系统监控工具:开发类似任务管理器的系统资源监控工具
  • 性能分析:监控应用程序的资源消耗情况
  • 自动化运维:编写脚本监控服务器资源使用情况
  • 进程管理:查找并终止异常进程
  • 资源限制:限制特定进程的资源使用量
  • 安全监控:检测异常网络连接或进程活动

总结

psutil是一个功能强大且易于使用的Python库,为系统监控和进程管理提供了全面的解决方案。通过本教程,您应该已经掌握了:

  1. 如何安装psutil库
  2. 获取CPU、内存、磁盘和网络信息的方法
  3. 进程管理的基本操作
  4. 其他系统信息的获取方式
  5. psutil在实际开发中的应用场景

无论您是开发系统监控工具、性能分析脚本,还是进行自动化运维工作,psutil都是不可或缺的强大工具。它的跨平台特性使得同一套代码可以在多种操作系统上运行,大大提高了开发效率。

发表评论