一文讲清怎么用Python实现Linux系统CPU、内存和磁盘监控管理工具
ahcoder 2025-06-23 14:25 1 浏览
摘要:在日常的服务器运维和管理工作当中,监控系统资源的使用情况是非常重要的一项任务。特别是在Linux服务器环境中,如果我们能及时了解CPU、内存和硬盘的使用状态,就能更快发现系统的性能瓶颈,提前预防可能出现的问题,从而保障业务稳定、持续地运行。很多人可能会觉得,想要实现这样的监控,必须依赖专业的监控软件才行。其实不然,用Python同样可以轻松开发出一个实用的Linux系统资源监控工具。
Python凭借简洁的语法、丰富的库和强大的数据处理能力,成为Linux系统管理的理想工具。通过Python,我们可以轻松实现对CPU使用率、内存占用、磁盘空间等系统资源的监控与分析。
本文主要讲解如何用Python实现Linux系统CPU、内存和磁盘资源的监控管理,帮助读者掌握实用技能,提升系统运维效率。详细内容请查阅下文。
一、访问Linux系统
1.登录Linux系统
2.查看Python环境
二、Linux系统监控管理工具
说明:这里是一个用 Python 编写的Linux系统的CPU、内存和磁盘等资源管理工具。
1.基本需求
说明:这里要实现的监控工具,主要有以下功能:
(1)实时获取CPU、内存、磁盘的使用情况;
(2)可以定时采集数据,并保存历史记录;
(3)当资源使用率超过阈值时,自动告警(如邮件、日志等);
(4)有简单的命令行或Web界面,方便查看和管理。
2.Python核心库
说明:本例主要用到以下Python库,以实现上述基本需求。
(1)psutil:获取系统资源信息的利器,跨平台,功能强大。
(2)time:用于定时采集。
(3)flask:实现Web界面(可选)。
(4)matplotlib/pandas:数据可视化和历史数据分析(可选)。
3.Linux监控管理工具的实现步骤
步骤一:获取系统资源信息
(1)获取CPU使用率
import psutil
# 获取CPU总使用率(百分比)
cpu_percent = psutil.cpu_percent(interval=1)
print(f"CPU使用率:{cpu_percent}%")
# 获取每个CPU核心的使用率
cpu_per_core = psutil.cpu_percent(interval=1, percpu=True)
print(f"每个核心使用率:{cpu_per_core}")
(2)获取内存使用情况
mem = psutil.virtual_memory()
print(f"内存总量:{mem.total / 1024 / 1024:.2f} MB")
print(f"已用内存:{mem.used / 1024 / 1024:.2f} MB")
print(f"剩余内存:{mem.available / 1024 / 1024:.2f} MB")
print(f"内存使用率:{mem.percent}%")
(3)获取磁盘使用情况
disk = psutil.disk_usage('/')
print(f"磁盘总量:{disk.total / 1024 / 1024 / 1024:.2f} GB")
print(f"已用磁盘:{disk.used / 1024 / 1024 / 1024:.2f} GB")
print(f"剩余磁盘:{disk.free / 1024 / 1024 / 1024:.2f} GB")
print(f"磁盘使用率:{disk.percent}%")
(4)获取磁盘IO和网络IO
# 获取磁盘IO
disk_io = psutil.disk_io_counters()
print(f"读字节数:{disk_io.read_bytes}, 写字节数:{disk_io.write_bytes}")
# 获取网络IO
net_io = psutil.net_io_counters()
print(f"发送字节数:{net_io.bytes_sent}, 接收字节数:{net_io.bytes_recv}")
步骤二:定时采集与历史记录
说明:这里主要是用一个循环,每隔一段时间采集一次数据,并保存到本地文件(如CSV)中。
import time
import csv
def collect_and_save(interval=60, filename="sys_monitor.csv"):
with open(filename, "a", newline='') as f:
writer = csv.writer(f)
# 写表头(只写一次)
if f.tell() == 0:
writer.writerow(["时间", "CPU使用率", "内存使用率", "磁盘使用率"])
while True:
now = time.strftime("%Y-%m-%d %H:%M:%S")
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
writer.writerow([now, cpu, mem, disk])
f.flush()
print(f"{now} | CPU: {cpu}% | 内存: {mem}% | 磁盘: {disk}%")
time.sleep(interval - 1) # 减去cpu_percent的1秒
# 下方取消注释即可运行
# collect_and_save()
步骤三:自动告警功能
说明:当某项资源使用率超过阈值时,可以自动发送邮件或写入日志,本实例主要使用的是集成到监控循环日志。
def monitor_with_alert(cpu_th=90, mem_th=90, disk_th=90):
while True:
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
alert_msgs = []
if cpu > cpu_th:
alert_msgs.append(f"CPU使用率过高:{cpu}%")
if mem > mem_th:
alert_msgs.append(f"内存使用率过高:{mem}%")
if disk > disk_th:
alert_msgs.append(f"磁盘使用率过高:{disk}%")
if alert_msgs:
print(f"CPU: {cpu}% | 内存: {mem}% | 磁盘: {disk}%")
time.sleep(60)
步骤四:Web管理界面展示
说明:这里可以用Flask做一个简单的Web页面。
from flask import Flask, render_template_string
import psutil
app = Flask(__name__)
@app.route('/')
def index():
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
html = f"""
<h2>Linux系统资源监控</h2>
<p>CPU使用率:{cpu}%</p>
<p>内存使用率:{mem}%</p>
<p>磁盘使用率:{disk}%</p>
"""
return html
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
三、完整实例:Linux系统资源监控管理工具
说明:这里将编写一个Linux系统资源监控管理程序,实现数据的可视化与历史分析,实现仪表盘展示功能,支持历史查询。
1.编写程序
说明:使用Linux系统的vim编写Python程序,提前创建程序的存放目录./sys_monitor_app。
执行指令# vim system_monitor.py编写程序
2.运行程序
说明:使用Python3运行程序,提前进入程序的存放目录./sys_monitor_app。
执行指令# python3 system_monitor.py运行程序
3.使用程序
说明:在客户端通过浏览器访问Linux系统资源管理工具,如下图
输入账号密码登录,如下图
可以选定时间段查询历史数据,如下
还可以下载全部历史数据,如下
4.程序功能说明
(1)登录认证页面
访问 http://服务器IP:5000/ 时,首先会跳转到登录页面;输入正确的用户名和密码(如 admin/admin123)才能进入监控仪表盘。
(2)资源监控仪表盘
- 页面布局美观
页面整体采用卡片式和分区布局,适配PC和移动端。右上角有“退出登录”按钮,点击可安全退出账号。
- 实时资源概览
页面顶部以卡片形式展示当前CPU、内存、磁盘使用率,数据每次刷新页面时实时获取。
- 资源趋势可视化
左侧折线图:展示最近一段时间的CPU、内存、磁盘使用率变化趋势。
右侧饼图:展示当前CPU、内存、磁盘的占比。
- IO分区分行展示
磁盘IO分区:单独一行展示磁盘读速率、写速率,并有磁盘IO速率趋势折线图。
网络IO分区:单独一行展示网络发送速率、接收速率,并有网络IO速率趋势折线图。
- 历史数据查询与下载
支持通过时间区间筛选历史数据(起始时间、结束时间)。
历史数据以表格形式展示,包含所有监控指标。
支持一键下载全部历史监控数据(CSV格式)。
(3)数据采集与存储
后台线程每隔10秒自动采集一次系统资源数据(CPU、内存、磁盘、磁盘IO、网络IO),并自动追加保存到./data/sys_monitor.csv文件中。历史数据可长期保存,也可下载到本地磁盘,便于后续分析。
相关推荐
- Linux 下如何查看进程的资源限制信息?
-
简介Linux上的cat/proc/$pid/limits命令提供有关特定进程的资源限制的信息,其中$pid是相关进程的进程ID(pid)。该文件是`/proc文件系统的一部分,该...
- Linux入侵排查TOP10误区!90%工程师都踩过坑
-
导语“删除恶意文件却破坏了关键证据”“盲目重启系统导致攻击链中断”——这些看似合理的操作,可能让入侵排查陷入僵局。据统计,全球90%的Linux工程师在首次应对入侵事件时至少踩中3个排查误区。本文深度...
- 一文掌握怎么利用Shell脚本实现Linux系统资源监控管理程序
-
简介:在日常管理Linux服务器时,监控和管理系统资源是确保服务器稳定运行的关键。及时了解CPU、内存、硬盘以及网络的使用情况,可以帮助我们预防系统故障,并找出性能上的瓶颈。虽然有很多专业的监控工具,...
- Linux 下的 PM2 完整指南(linuxnmcli)
-
PM2是Node.js应用的专业级进程管理器,专为生产环境设计,提供应用守护、集群管理、日志监控等核心功能。核心特性应用守护:崩溃时自动重启零秒重载:热更新应用不停机(pm2reload)...
- linux中磁盘满了?一招教你快速清理
-
创作背景:当天部署服务时,发现无法部署,后来经过日志排查后发现服务器磁盘满了,查询资料后进行了清理。话不多说,直接上解决方法。操作一:1.查看磁盘大小:df-h2.直接在最上层进行排序:du-a...
- 适用于 Linux 的内存分析器:Bytehound
-
#暑期创作大赛#特征可用于分析内存泄漏,查看内存到底在哪里被消耗,识别临时分配并调查过多的内存碎片收集每次分配和释放以及完整的堆栈跟踪可以动态剔除临时分配,使您能够在很长一段时间内进行分析使用定制的堆...
- 一文讲清Python在Linux系统CPU、内存和磁盘管理方面的应用实例
-
摘要:在当今快速发展的IT运维和开发世界里,Linux系统凭借其高效能、高稳定性和开源的特性,在服务器管理、云计算服务以及大数据处理等众多领域中占据了核心位置。随着业务规模扩大,系统资源的监控与管理变...
- Linux系统磁盘分区管理LVM概念及扩容操作
-
LVM的全称为LogicalVolumeManager,逻辑卷管理。它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过L...
- ringbuffer 消息队列 内存池 性能优化利器
-
简约而不简单的ringbuffer最近在研究srsLTE的代码,其中就发现一个有意思的数据结构------ringbuffer。虽然,这是一个很基本的数据结构,但时,它在LTE这种通信协议栈系统中却大...
- Rocky Linux 9常用命令备忘录(不定时更新)
-
RockyLinux9常用命令备忘录(不定时更新)大家好,我是星哥,上次介绍了<RockyLinux9系统安装配置图解教程并做简单配置>:https://mp.weixin.qq...
- 理解Linux的Memory overcommit(linux reserved-memory)
-
MemoryOvercommit的意思是操作系统承诺给进程的内存大小超过了实际可用的内存。一个保守的操作系统不会允许memoryovercommit,有多少就分配多少,再申请就没有了,这其实有些浪...
- Linux systemd 4 命令深度对比:休眠、睡眠、关
-
"90%的人不知道Linux关机命令暗藏玄机?三招教你选对保命符"键盘突然没反应?电脑卡成PPT?这些崩溃瞬间可能都怪你选错了系统命令!今天就用咖啡厅偶遇的工程师视角,带你看懂Linu...
- 一次解决Linux内核内存泄漏实战全过程
-
什么是内存泄漏:程序向系统申请内存,使用完不需要之后,不释放内存还给系统回收,造成申请的内存被浪费.发现系统中内存使用量随着时间的流逝,消耗的越来越多,例如下图所示:接下来的排查思路是:1.监控系统中...
- Linux系列:聊一聊 SystemV 下的进程间共享内存
-
一:背景1.讲故事昨天在分析一个linux的dump时,看到了这么一话警告,参考如下:0:000>!eeheap-gc***WARNING:Unabletoverifyt...
- linux收发网络包过程(linux收包流程)
-
网络模型由于OSI模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案事实上,我们比较常,也比较实用的是四层模型,即TCP/IP网络模型,Linux系统正是按照这套网络模型...
- 一周热门
- 最近发表
- 标签列表
-
- linux 远程 (37)
- u盘 linux (32)
- linux 登录 (34)
- linux 路径 (33)
- linux 文件命令 (35)
- linux 是什么 (35)
- linux 界面 (34)
- 查看文件 linux (35)
- linux 语言 (33)
- linux代码 (32)
- linux 查看命令 (33)
- 关闭linux (34)
- root linux (33)
- 删除文件 linux (35)
- linux 主机 (34)
- linux与 (33)
- linux 函数 (35)
- linux .ssh (35)
- cpu linux (35)
- 查看linux 系统 (32)
- linux 防火墙 (33)
- linux 手机 (32)
- linux 镜像 (34)
- linux ip地址 (34)
- linux 用户查看 (33)