使用Python实时监控服务系统资源

使用Python实时监控服务系统资源

本文介绍如何使用Python的psutil库和matplotlib库来实时监控服务系统资源(CPU、内存、磁盘和网络),并将监控数据以图形化报表的形式展示。

第一步:安装必需库

首先,我们需要安装所需的库。可以通过pip安装psutilmatplotlib

pip install psutil matplotlib

第二步:导入库和初始化数据

在开始监控之前,我们需要导入psutilmatplotlib库,并初始化用于存储系统资源数据的变量,以及设置图表标签等信息。

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实时监控服务系统资源,并通过图形化报表展示数据。希望对您有帮助!

posted @   青花绚烂  阅读(189)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示