Python使用psutil实现系统监控与资源管理

 更新时间:2025年05月16日 08:32:06   作者:萧鼎  
这篇文章主要为大家详细介绍了psutil 的各项功能,并结合实际代码示例,展示如何用 Python 构建自己的系统监控工具,资源分析器和进程管理脚本等

在系统运维、资源监控、性能分析、服务状态诊断等领域,开发者常常需要获取操作系统底层信息,如 CPU 使用率、内存占用、磁盘读写、网络传输、进程详情等。虽然这些功能可以通过 shell 命令实现,如 top、df、ps、iostat 等,但在自动化脚本和跨平台开发中,使用 Python 脚本来完成这些任务更具灵活性和可移植性。

这正是 psutil 的用武之地 —— 一个功能强大的跨平台系统监控库,可以轻松获取各种系统资源状态和进程信息,且支持 Linux、Windows、macOS 等平台。

本文将深入讲解 psutil 的各项功能,并结合实际代码示例,展示如何用 Python 构建自己的系统监控工具、资源分析器、进程管理脚本等。

一、psutil 简介

psutil 是“process and system utilities”的缩写,它是一个 跨平台的系统监控库,用于:

  • 获取 CPU、内存、磁盘、网络 等系统使用情况
  • 管理和获取 进程信息
  • 实现任务监控、资源追踪和系统健康检查
  • 提供类 Unix ps, top, df, netstat, lsof 等命令的功能接口

它的设计初衷是替代用 Python 封装 shell 命令的繁琐做法,提供一致、优雅、性能优异的 API。

二、安装与基本使用

安装方式

使用 pip 安装非常简单:

pip install psutil

安装完成后,几乎可以立即开始使用,无需额外配置。

快速示例:获取当前 CPU 使用率

import psutil

print("当前 CPU 使用率:", psutil.cpu_percent(interval=1), "%")

cpu_percent() 表示在指定时间间隔内(如 1 秒)测量 CPU 总体使用率。

三、CPU 信息监控

1. 获取 CPU 逻辑/物理核心数

print("物理核心数:", psutil.cpu_count(logical=False))
print("逻辑核心数:", psutil.cpu_count(logical=True))

2. 每个核心的使用率

import time

for _ in range(5):
    usage = psutil.cpu_percent(interval=1, percpu=True)
    print("每个核心使用率:", usage)

3. 获取 CPU 时间信息

times = psutil.cpu_times()
print(f"user: {times.user}, system: {times.system}, idle: {times.idle}")

这个 API 提供了系统级的 CPU 时间分布。

四、内存信息监控

1. 获取虚拟内存使用情况

mem = psutil.virtual_memory()
print(f"总内存: {mem.total / 1024 ** 3:.2f} GB")
print(f"已使用: {mem.used / 1024 ** 3:.2f} GB")
print(f"空闲: {mem.available / 1024 ** 3:.2f} GB")
print(f"使用率: {mem.percent}%")

2. 获取 swap 交换分区信息

swap = psutil.swap_memory()
print(f"Swap 总量: {swap.total / 1024 ** 3:.2f} GB")
print(f"使用率: {swap.percent}%")

五、磁盘信息监控

1. 获取磁盘分区信息

partitions = psutil.disk_partitions()
for p in partitions:
    print(f"挂载点: {p.mountpoint}, 类型: {p.fstype}")

2. 获取磁盘使用情况

usage = psutil.disk_usage('/')
print(f"总空间: {usage.total / 1024 ** 3:.2f} GB")
print(f"已用: {usage.used / 1024 ** 3:.2f} GB")
print(f"剩余: {usage.free / 1024 ** 3:.2f} GB")

3. 实时磁盘 IO 情况

io = psutil.disk_io_counters()
print(f"读字节: {io.read_bytes / 1024 ** 2:.2f} MB")
print(f"写字节: {io.write_bytes / 1024 ** 2:.2f} MB")

六、网络信息监控

1. 获取网络 IO 情况

net = psutil.net_io_counters()
print(f"发送: {net.bytes_sent / 1024 ** 2:.2f} MB")
print(f"接收: {net.bytes_recv / 1024 ** 2:.2f} MB")

2. 获取网卡信息

addrs = psutil.net_if_addrs()
for iface, infos in addrs.items():
    print(f"\n网卡: {iface}")
    for info in infos:
        print(f"  地址: {info.address} ({info.family})")

3. 当前网络连接

conns = psutil.net_connections(kind='inet')
for conn in conns[:5]:
    print(f"连接: {conn.laddr} -> {conn.raddr}, 状态: {conn.status}")

七、进程管理

1. 枚举当前所有进程

for proc in psutil.process_iter(['pid', 'name', 'username']):
    print(proc.info)

2. 获取指定进程的详细信息

p = psutil.Process(1)  # PID 1 通常是 init 或 systemd
print(f"名称: {p.name()}")
print(f"路径: {p.exe()}")
print(f"状态: {p.status()}")
print(f"CPU使用率: {p.cpu_percent(interval=1.0)}")
print(f"内存使用: {p.memory_info().rss / 1024 ** 2:.2f} MB")

3. 操作进程(终止、挂起、恢复)

p = psutil.Process(1234)
p.suspend()  # 挂起
p.resume()   # 恢复
p.terminate()  # 终止

注意:需要管理员权限或 root 权限才能操作其他用户的进程。

八、构建一个简单的系统资源仪表板

你可以使用 psutil + rich 或 psutil + flask/streamlit 构建漂亮的图形或终端仪表盘。下面是一个简单的终端监控:

import psutil
import time
import os

def monitor():
    while True:
        os.system('cls' if os.name == 'nt' else 'clear')
        print("=== 实时系统资源监控 ===")
        print(f"CPU 使用率: {psutil.cpu_percent()}%")
        mem = psutil.virtual_memory()
        print(f"内存: {mem.used / 1024 ** 3:.2f} GB / {mem.total / 1024 ** 3:.2f} GB ({mem.percent}%)")
        net = psutil.net_io_counters()
        print(f"网络: 发送 {net.bytes_sent / 1024 ** 2:.2f} MB, 接收 {net.bytes_recv / 1024 ** 2:.2f} MB")
        time.sleep(1)

if __name__ == "__main__":
    monitor()

可以扩展为 Web 仪表盘,甚至接入 Grafana、Prometheus 进行数据上报。

九、高级用法与实践案例

1. 编写一个自动杀死高 CPU 占用进程的守护脚本

def auto_kill(threshold=80):
    for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
        try:
            if proc.info['cpu_percent'] > threshold:
                print(f"杀死高 CPU 进程: {proc.info}")
                psutil.Process(proc.info['pid']).terminate()
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            continue

2. 跨平台性能分析工具

你可以用 psutil 收集数据并记录日志:

import json
import datetime

def log_stats():
    stats = {
        "time": str(datetime.datetime.now()),
        "cpu": psutil.cpu_percent(),
        "mem": psutil.virtual_memory().percent,
        "disk": psutil.disk_usage('/').percent,
    }
    with open("syslog.json", "a") as f:
        f.write(json.dumps(stats) + "\n")

可用于机器长时间运行状态监控和可视化分析。

十、总结与展望

psutil 是一个非常成熟、稳定、文档完善的 Python 库,它几乎可以满足你对操作系统资源访问的一切需求,包括但不限于:

  • 任务管理器替代脚本
  • DevOps 运维工具
  • 系统性能分析
  • 自动化测试平台
  • AI 训练任务资源调度

优势:

  • 跨平台支持强(Windows/Linux/macOS)
  • API 直观、结构清晰
  • 文档丰富、社区活跃
  • 可集成至各种 Python 工具链中

注意事项:

  • 某些操作(如杀死进程、访问别的用户进程)可能需要管理员权限
  • 大量遍历系统进程时注意异常处理(AccessDenied, NoSuchProcess)

到此这篇关于Python使用psutil实现系统监控与资源管理的文章就介绍到这了,更多相关Python psutil监控系统与资源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 中如何使用requests模块发布表单数据

    Python 中如何使用requests模块发布表单数据

    requests 库是 Python 的主要方面之一,用于创建对已定义 URL 的 HTTP 请求,本篇文章介绍了 Python requests 模块,并说明了我们如何使用该模块在 Python 中发布表单数据,感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • 深入探讨Python中切片赋值的高级技巧指南

    深入探讨Python中切片赋值的高级技巧指南

    本文将深入探讨Python切片赋值的高级技巧,重点解析步长操作和多维数据处理的实用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-02-02
  • 详解Python中最常用的10个内置函数

    详解Python中最常用的10个内置函数

    Python作为一种多用途编程语言,拥有丰富的内置函数库,这些函数可以极大地提高开发效率,本文将介绍Python中最常用的10个内置函数,我们将深入了解每个函数,并提供示例代码以帮助您更好地理解它们,需要的朋友可以参考下
    2023-11-11
  • python聚类算法选择方法实例

    python聚类算法选择方法实例

    在本篇文章里小编给大家整理的是一篇关于python聚类算法选择方法实例,有需要的朋友们可以学习参考下。
    2021-07-07
  • 基于Python开发批量提取Excel图片的小工具

    基于Python开发批量提取Excel图片的小工具

    这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下
    2025-03-03
  • Python seaborn barplot画图案例

    Python seaborn barplot画图案例

    这篇文章主要介绍了Python seaborn barplot画图案例,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Python实现朴素贝叶斯的学习与分类过程解析

    Python实现朴素贝叶斯的学习与分类过程解析

    这篇文章主要介绍了Python实现朴素贝叶斯的学习与分类过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python在Console下显示文本进度条的方法

    Python在Console下显示文本进度条的方法

    Python是一门与php有点像的编辑语言了,下文来给各位在利用Python实现进度条了,对Python在Console下显示文本进度条的方法相关知识感兴趣的朋友一起学习吧
    2016-02-02
  • python+selenium+PhantomJS抓取网页动态加载内容

    python+selenium+PhantomJS抓取网页动态加载内容

    一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此 时,我们使用web自动化测试化工具Selenium+无界面浏览器PhantomJS来抓取javascript渲染的页面,下面实现一个简单的爬取
    2020-02-02
  • Python类反射机制使用实例解析

    Python类反射机制使用实例解析

    这篇文章主要介绍了Python类反射机制使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论