Python使用psutil库实现系统监控与管理详解
本文详细讲解如何使用 Python 第三方库 psutil 进行系统级资源监控与进程管理。内容覆盖从环境配置、CPU 与内存数据采集、进程列表遍历到安全终止任务的具体操作流程,附带可直接运行的代码片段与关键参数说明,适合需要编写自动化运维脚本或性能分析工具的开发者参考。
核心功能概览
psutil 是一个跨平台的 Python 库,旨在简化对系统进程和各项资源利用率(如 CPU、内存、磁盘读写与网络通信)的调用。它封装了底层的系统调用接口,无需编写繁琐的命令行脚本即可在 Windows、macOS 和 Linux 环境下统一获取硬件与软件运行数据。
第1步:准备开发环境与引入依赖
目的:建立可调用底层系统接口的 Python 运行环境。
入口:操作系统自带的终端(Terminal)或命令行窗口(CMD / PowerShell)。
动作:通过默认包管理器下载并安装对应版本库。
参数:pip install psutil
完成状态:控制台打印 Successfully installed psutil-xxx 后,即可在任意 Python 文件中通过 import psutil 导入模块。
第2步:采集系统基础硬件状态
目的:实时读取物理机或虚拟机的核心算力与存储容量。
入口:新建 .py 文件编写采集脚本。
动作:调用 cpu_count() 与 virtual_memory() 获取处理器逻辑核心数,并解析内存总量、已用量与可用量。
参数:关注 total(字节)、available(字节)、percent(百分比)。
完成状态:终端按格式化字符串输出明确的字节数值与分区挂载点列表,数据与实际物理规格一致即为正常。
import psutil
# 获取CPU逻辑核心数
print("CPU逻辑核心数:", psutil.cpu_count())
# 获取内存总量和可用内存
mem = psutil.virtual_memory()
print(f"总内存:{mem.total} bytes")
print(f"可用内存:{mem.available} bytes")
# 获取磁盘分区信息
disk_partitions = psutil.disk_partitions()
for partition in disk_partitions:
print(f"磁盘分区:{partition.device}, 挂载点:{partition.mountpoint}")
# 获取网络连接信息
connections = psutil.net_connections()
print("网络连接数:", len(connections))
第3步:监控当前运行的进程清单
目的:追踪后台服务或用户程序的 PID 与资源消耗情况。
入口:基于 process_iter() 开启迭代器遍历。
动作:逐一提取每个进程的标识号与名称,并可针对特定 pid 实例化对象以查询更详细的统计指标。
参数:status() 返回运行状态,cpu_times() 返回用户态与内核态耗时,memory_info() 返回 RSS 与 VMS 内存占用。
完成状态:脚本稳定输出包含目标 PID、状态码及精确时间戳的日志,无 MemoryError 或权限拦截报错。
# 获取所有进程列表
processes = psutil.process_iter()
for process in processes:
print(f"进程PID:{process.pid}, 名称:{process.name()}")
# 获取指定进程的详细信息
target_pid = 1234
try:
process = psutil.Process(target_pid)
print("进程名称:", process.name())
print("进程状态:", process.status())
print("进程占用CPU时间:", process.cpu_times())
print("进程内存使用情况:", process.memory_info())
except psutil.NoSuchProcess:
print(f"PID {target_pid} 不存在或已结束")
第4步:执行进程干预与引导记录查询
目的:清理卡死任务并核对系统累计运行时长。
入口:锁定异常进程对象并触发清理接口。
动作:调用 terminate() 发送终止信号,读取 boot_time() 计算开机距今的时间跨度。
⚠️ 风险提示:强制结束进程可能导致未保存的文件丢失或关联子进程变为孤儿状态。生产环境中建议先使用 terminate(),并在短暂延迟后检测是否已退出,必要时升级至 kill()。
参数:pid_to_terminate 需替换为实际故障进程号。
完成状态:目标进程在任务管理器或 top/htop 中消失,且 boot_time 返回正确的 epoch 时间戳。
# 终止指定PID的进程
pid_to_terminate = 1234
try:
process_to_terminate = psutil.Process(pid_to_terminate)
process_to_terminate.terminate()
print(f"已发送终止请求至 PID {pid_to_terminate}")
except psutil.AccessDenied:
print("当前用户权限不足,请使用管理员/root身份运行脚本")
结果验证与常见问题排查
完成上述脚本运行后,若发现内存返回值偏大或进程列表不全,通常由以下原因引起:一是未获取管理员权限导致部分受保护的系统进程无法读取详情,此时需在系统终端中以管理员模式启动 Python;二是不同操作系统对磁盘与网络接口的枚举方式存在差异,Windows 下可能需要处理虚拟驱动器盘符冲突,Linux/macOS 下注意权限目录(如 /proc)的访问限制。代码中已加入基础异常捕获机制,可根据 psutil.NoSuchProcess 或 psutil.AccessDenied 进一步细化业务逻辑。
总结
以上就是利用Python调用psutil库实现系统监控与进程管理的详细内容,更多关于Python系统资源排查、自动化运维脚本编写及技术进阶的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









