使用Python实时监控服务系统资源
使用Python实时监控服务系统资源
本文介绍如何使用Python的psutil
库和matplotlib
库来实时监控服务系统资源(CPU、内存、磁盘和网络),并将监控数据以图形化报表的形式展示。
第一步:安装必需库
首先,我们需要安装所需的库。可以通过pip安装psutil
和matplotlib
:
pip install psutil matplotlib
第二步:导入库和初始化数据
在开始监控之前,我们需要导入psutil
和matplotlib
库,并初始化用于存储系统资源数据的变量,以及设置图表标签等信息。
import psutil
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import datetime
# 创建一个空画布和4个子图
fig, axs = plt.subplots(2, 2, figsize=(12, 8))
# 初始化时间戳和数据
x = []
data = {'CPU': [], 'Memory': [], 'Disk': [], 'Network_sent': [], 'Network_received': []}
labels = {'CPU': 'CPU Utilization', 'Memory': 'Memory Usage', 'Disk': 'Disk Usage', 'Network': 'Network Traffic'}
在这一步中,我们准备好了必要的库和数据结构,以便开始实时监控系统资源。
第三步:更新数据和绘制图表
接下来,我们定义一个函数update_plot()
,在这个函数中我们会获取系统资源数据,更新数据存储结构并绘制图表。
def update_plot(frame):
x.append(datetime.datetime.now())
# 获取系统资源数据
data['CPU'].append(psutil.cpu_percent())
data['Memory'].append(psutil.virtual_memory().percent)
disk_usage = psutil.disk_usage('/')
data['Disk'].append(disk_usage.percent)
network = psutil.net_io_counters()
data['Network_sent'].append(network.bytes_sent / (1024 * 1024))
data['Network_received'].append(network.bytes_recv / (1024 * 1024)
# 更新子图表数据
for i, (ax, (key, value)) in enumerate(zip(axs.flat, data.items())):
ax.clear()
ax.plot(x, value, color='C'+str(i), label=key)
ax.set_title(labels.get(key, key))
ax.set_ylabel('Usage (%)' if key in ['CPU', 'Memory', 'Disk'] else 'Traffic (MB)')
ax.legend()
plt.tight_layout()
在这一步中,我们已经可以通过update_plot()
函数实时更新系统资源数据,并动态绘制图表。
第四步:创建动画并展示图表
最后,我们创建一个动画FuncAnimation
,它会在固定时间间隔内调用update_plot()
函数,并通过save_count
参数避免潜在的缓存问题。
# 创建动画
ani = FuncAnimation(fig, update_plot, frames=None, interval=1000, save_count=1000)
plt.show()
通过这四个步骤,我们完成了一个实时监控服务系统资源的程序,通过图表直观地展示系统资源使用情况。
完整代码如下:
import psutil
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import datetime
# 创建一个空画布和4个子图
fig, axs = plt.subplots(2, 2, figsize=(12, 8))
# 初始化时间戳和数据
x = []
data = {'CPU': [], 'Memory': [], 'Disk': [], 'Network_sent': [], 'Network_received': []}
labels = {'CPU': 'CPU Utilization', 'Memory': 'Memory Usage', 'Disk': 'Disk Usage', 'Network': 'Network Traffic'}
def update_plot(frame):
x.append(datetime.datetime.now())
# 获取系统资源数据
data['CPU'].append(psutil.cpu_percent())
data['Memory'].append(psutil.virtual_memory().percent)
data['Disk'].append(psutil.disk_usage('/').percent)
network = psutil.net_io_counters()
data['Network_sent'].append(network.bytes_sent / (1024 * 1024))
data['Network_received'].append(network.bytes_recv / (1024 * 1024))
# 更新子图表数据
for i, (ax, (key, value)) in enumerate(zip(axs.flat, data.items())):
ax.clear()
ax.plot(x, value, color='C' + str(i), label=key)
ax.set_title(labels.get(key, key))
ax.set_ylabel('Usage (%)' if key in ['CPU', 'Memory', 'Disk'] else 'Traffic (MB)')
ax.legend()
plt.tight_layout()
# 创建动画
ani = FuncAnimation(fig, update_plot, frames=None, interval=1000, save_count=1000)
plt.show()
本文讲解了如何使用Python和Matplotlib实时监控服务系统资源,并通过图形化报表展示数据。希望对您有帮助!
本文来自博客园,作者:青花绚烂,转载请注明原文链接:https://www.cnblogs.com/xuxiaobing123/p/18143217
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架