Pixel Language Portal 系统资源监控面板开发:Python实现类任务管理器功能
1. 引言:为什么需要轻量级系统监控工具
在日常服务器运维工作中,系统资源监控是必不可少的一环。想象一下这样的场景:你的服务器突然响应变慢,C盘空间告急,但你却不知道具体是哪个进程占用了资源。这时候,一个轻量级的系统监控工具就能派上大用场。
传统的任务管理器功能有限,而专业监控系统又过于笨重。本文将介绍如何使用Python开发一个类似任务管理器的系统资源监控面板,能够实时监控CPU、内存、磁盘IO和网络流量等关键指标,并通过终端或Web界面直观展示数据。
2. 核心监控指标与实现思路
2.1 需要监控的关键系统指标
一个完善的系统监控工具应该关注以下几个核心指标:
- CPU使用率:监控整体和各核心的负载情况
- 内存使用:包括物理内存和虚拟内存的使用情况
- 磁盘活动:特别是C盘空间使用率和IO读写速度
- 网络流量:监控上传下载速度和连接状态
2.2 技术选型与实现方案
我们将使用Python的几个强大库来实现这些功能:
- psutil:跨平台系统信息库,可以轻松获取系统资源使用情况
- rich:终端美化库,用于在命令行界面创建漂亮的监控面板
- socket:用于获取网络相关信息
- fastapi(可选):如果需要Web界面,可以用它快速搭建API
3. 基础监控功能实现
3.1 安装必要的Python库
首先确保安装了所需的库:
pip install psutil rich如果需要Web界面,可以额外安装:
pip install fastapi uvicorn3.2 CPU和内存监控实现
让我们从最基础的CPU和内存监控开始:
import psutil import time def get_system_stats(): # 获取CPU使用率 cpu_percent = psutil.cpu_percent(interval=1) # 获取内存信息 mem = psutil.virtual_memory() return { "cpu": cpu_percent, "memory": { "total": mem.total, "available": mem.available, "used": mem.used, "percent": mem.percent } } while True: stats = get_system_stats() print(f"CPU使用率: {stats['cpu']}%") print(f"内存使用: {stats['memory']['percent']}%") time.sleep(2)3.3 磁盘监控实现
针对"C盘满了怎么清理"这个常见问题,我们可以特别关注磁盘空间:
def get_disk_info(): partitions = psutil.disk_partitions() disk_info = {} for partition in partitions: if 'C:' in partition.mountpoint: usage = psutil.disk_usage(partition.mountpoint) disk_info[partition.mountpoint] = { "total": usage.total, "used": usage.used, "free": usage.free, "percent": usage.percent } return disk_info disk_stats = get_disk_info() for drive, stats in disk_stats.items(): print(f"{drive} 使用情况: {stats['percent']}% (已用 {stats['used']/1024/1024/1024:.2f}GB)")4. 高级功能实现
4.1 网络流量监控
网络监控可以帮助我们了解服务器的通信状况:
def get_network_info(): net_io = psutil.net_io_counters() return { "bytes_sent": net_io.bytes_sent, "bytes_recv": net_io.bytes_recv, "packets_sent": net_io.packets_sent, "packets_recv": net_io.packets_recv } # 获取两次网络数据计算流量 net1 = get_network_info() time.sleep(1) net2 = get_network_info() upload_speed = (net2['bytes_sent'] - net1['bytes_sent']) / 1024 # KB/s download_speed = (net2['bytes_recv'] - net1['bytes_recv']) / 1024 # KB/s print(f"上传速度: {upload_speed:.2f} KB/s") print(f"下载速度: {download_speed:.2f} KB/s")4.2 使用Rich库创建终端监控面板
Rich库可以让我们的监控面板更加美观:
from rich.console import Console from rich.table import Table from rich.live import Live import psutil def generate_monitor_table(): table = Table(title="系统资源监控面板") table.add_column("指标") table.add_column("当前值") table.add_column("状态") # CPU信息 cpu_percent = psutil.cpu_percent() table.add_row("CPU使用率", f"{cpu_percent}%", "[red]警告" if cpu_percent > 80 else "[green]正常") # 内存信息 mem = psutil.virtual_memory() table.add_row("内存使用", f"{mem.percent}%", "[red]警告" if mem.percent > 80 else "[green]正常") # 磁盘信息 disk = psutil.disk_usage('C:') table.add_row("C盘空间", f"{disk.percent}%", "[red]警告" if disk.percent > 85 else "[green]正常") return table console = Console() with Live(console=console, refresh_per_second=4) as live: while True: live.update(generate_monitor_table()) time.sleep(0.25)5. 实际应用与扩展
5.1 针对C盘空间不足的解决方案
当监控到C盘空间不足时,我们可以扩展功能自动找出大文件:
import os def find_large_files(directory, size_threshold=100): """查找大于指定大小(MB)的文件""" large_files = [] for root, dirs, files in os.walk(directory): for file in files: file_path = os.path.join(root, file) try: file_size = os.path.getsize(file_path) / 1024 / 1024 # MB if file_size > size_threshold: large_files.append((file_path, file_size)) except: continue return sorted(large_files, key=lambda x: x[1], reverse=True) # 查找C盘中大于100MB的文件 large_files = find_large_files('C:\\') for file, size in large_files[:10]: # 显示前10个大文件 print(f"{file} - {size:.2f} MB")5.2 Web监控面板实现(可选)
如果需要远程监控,可以使用FastAPI创建简单的Web界面:
from fastapi import FastAPI from fastapi.responses import HTMLResponse import psutil app = FastAPI() def get_system_html(): cpu = psutil.cpu_percent() mem = psutil.virtual_memory() disk = psutil.disk_usage('C:') return f""" <html> <body> <h1>系统监控面板</h1> <p>CPU使用率: {cpu}%</p> <p>内存使用: {mem.percent}%</p> <p>C盘空间: {disk.percent}%</p> </body> </html> """ @app.get("/", response_class=HTMLResponse) async def monitor(): return get_system_html()启动服务后,访问http://localhost:8000即可查看监控数据。
6. 总结
通过这个项目,我们实现了一个轻量级的系统资源监控工具,能够实时监控CPU、内存、磁盘和网络等关键指标。相比Windows自带的任务管理器,我们的工具更加灵活,可以根据需要扩展功能,比如针对"C盘满了怎么清理"这样的常见问题提供解决方案。
实际使用中,你可以根据自己的需求调整监控频率、添加更多指标,或者改进可视化效果。这个工具特别适合服务器运维人员使用,可以帮助快速定位系统资源瓶颈,及时发现问题并解决。
整体开发下来,Python的psutil库确实非常强大,配合rich库可以轻松创建漂亮的终端界面。如果你需要更复杂的功能,还可以考虑添加告警机制、历史数据存储和分析等功能,让这个监控工具更加完善。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。