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

【运维】掌控系统脉搏:用 Python 和 psutil打造高效运维监控工具

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界

在现代运维中,实时监控系统性能是保障服务稳定运行的关键。本文深入探讨如何利用 Python 的 psutil 库开发一个功能强大的系统资源监控工具,覆盖 CPU、内存、磁盘和网络等核心指标。通过详细的代码示例和解释,读者将学习如何获取系统运行状态、计算资源使用率、生成可视化报表,并实现自动化监控。本文不仅展示了 psutil 的基本用法,还深入分析了其高级功能,如进程管理、传感器数据读取等。结合中文注释和丰富的实例代码,本文旨在帮助开发者快速上手,打造适用于生产环境的监控解决方案。无论是初学者还是资深运维工程师,都能从中获得实用技能和灵感,提升系统管理效率。


正文

引言

随着云计算和分布式系统的普及,服务器性能监控成为运维工作中不可或缺的一部分。Python 作为一门简单易学且功能强大的编程语言,结合其丰富的第三方库,为开发高效运维工具提供了无限可能。其中,psutil(Process and System Utilities)是一个跨平台的系统监控库,能够轻松获取 CPU、内存、磁盘、网络等资源的使用情况。本文将从基础用法入手,逐步深入,带你用 psutil 打造一个完整的系统性能监控工具,并生成详细的报表。

1. psutil 简介与安装

psutil 是一个开源的 Python 库,支持 Windows、Linux、macOS 等多种操作系统。它提供了丰富的 API,用于获取系统资源信息、进程管理甚至硬件状态。安装非常简单,只需运行以下命令:

pip install psutil

安装完成后,我们可以通过 Python 脚本验证其是否正常工作:

import psutil
print(psutil.__version__)  # 输出 psutil 的版本号,例如 5.9.8
2. 监控 CPU 性能

CPU 是系统的核心部件,其性能直接影响服务器的运行效率。psutil 提供了多种方法来获取 CPU 的使用情况。

2.1 获取 CPU 使用率

psutil.cpu_percent() 是获取 CPU 使用率最常用的方法。它返回一个浮点数,表示当前 CPU 的使用百分比。

import psutil
import time# 获取 CPU 总体使用率
cpu_usage = psutil.cpu_percent(interval=1)  # interval=1 表示采样间隔为1秒
print(f"当前 CPU 使用率: {cpu_usage}%")# 按核心获取 CPU 使用率
cpu_usage_per_core = psutil.cpu_percent(interval=1, percpu=True)
print(f"每个核心的 CPU 使用率: {cpu_usage_per_core}")

代码解释

  • interval=1 表示采样间隔为 1 秒,避免瞬时数据波动。
  • percpu=True 返回一个列表,每个元素对应一个 CPU 核心的使用率。
2.2 获取 CPU 频率和负载

除了使用率,CPU 的频率和负载也是重要指标。psutil.cpu_freq() 返回 CPU 的当前频率、最小频率和最大频率。

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

注意:在某些虚拟机或容器环境中,频率信息可能不可用。

2.3 计算 CPU 负载

CPU 负载可以通过 psutil.getloadavg() 获取(仅限 Linux/Unix 系统):

try:load_avg = psutil.getloadavg()  # 返回 1、5、15 分钟的平均负载print(f"系统负载 (1min, 5min, 15min): {load_avg}")
except AttributeError:print("当前系统不支持获取负载信息")
3. 监控内存使用情况

内存是系统性能的另一个关键指标。psutil.virtual_memory() 返回内存的详细状态。

# 获取内存使用情况
memory = psutil.virtual_memory()print(f"总内存: {memory.total / (1024 ** 3):.2f} GB")
print(f"已用内存: {memory.used / (1024 
http://www.xdnf.cn/news/213499.html

相关文章:

  • Qt的WindowFlags窗口怎么选?
  • 第六章 QT基础:7、Qt中多线程的使用
  • Knife4j 接口文档添加登录验证流程分析
  • 天能资管(SkyAi):全球布局,领航资管新纪元
  • 单片机-89C51部分:9、串行口通讯
  • TTL、RS-232 和 RS-485 串行通信电平标准区别解析
  • 【C语言练习】010. 理解函数参数的传递方式
  • 深度解析Qwen3:性能实测对标Gemini 2.5 Pro?开源大模型新标杆的部署挑战与机遇
  • 牛客周赛 Round 91
  • k8s 学习记录 (六)_Pod 污点和容忍性详解
  • 日常开发小Tips:后端返回带颜色的字段给前端
  • 数据结构:实验7.3Huffman树与Huffman编码
  • 【18】爬虫神器 Pyppeteer 的使用
  • 信息科技伦理与道德3-4:面临挑战
  • 宾馆一次性拖鞋很重要,扬州卓韵酒店用品详细介绍其材质与卫生标准
  • 论文导读 - 基于特征融合的电子鼻多任务深度学习模型研究
  • 【无基础】小白解决Docker pull时报错:https://registry-1.docker.io/v2/
  • Html 2
  • verl - 火山引擎大语言模型强化学习训练库
  • Wi-SUN与LoRa和NB-IoT通信技术的对比
  • AI+零售:智能推荐、无人店与供应链管理的未来
  • 基于STM32、HAL库的DS28E15P安全验证及加密芯片驱动程序设计
  • Kafka 消息可靠性深度解析:大流量与小流量场景下的设计哲学
  • [逆向工程]如何理解小端序?逆向工程中的字节序陷阱与实战解析
  • 搜索引擎中的检索模型(布尔模型、向量空间模型、概率模型、语言模型)
  • 贵族运动项目有哪些·棒球1号位
  • CSR社会责任报告是什么?CSR社会责任报告定义
  • C++ 如何计算两个gps 的距离
  • 基于 ARM 的自动跟拍云台设计
  • 【无标题】好用的远程链接插件