本帖最后由 爱电脑的昕宇 于 2024-6-30 09:38 编辑
第二版新增:
1、磁盘与网络IO支持MB与KB间的换算(仅当程序运行30秒以上时有效)
下载地址
程序简介
这个程序可以实时监测CPU利用率、内存占用、磁盘IO以及网络IO。程序自动强制位于所有窗口顶层,方便观察数据。当然,也可以最小化。
你甚至可以导出图表为图片文件。只要点击下方按钮栏的保存按钮就可以了。
兼容性信息
.exe版支持32位或64位的Windows7及以上操作系统(需要VC运行库)
.py脚本借助Python运行环境可以运行在Windows2000及以上版本的操作系统,以及Linux/MacOS
已知问题与程序局限性
1、磁盘与网络部分单位无法改变。磁盘读写只能以MB为单位,网络传载只能以KB为单位。
2、主页面的图例使用了歪果仁的语言,因为pylab包不支持中文。
3、x轴单位问题。由于作品逻辑缺陷以及硬件性能的差异,单位时间可能随程序运行由初始的0.8秒变长。但是当单位时间增长到1秒时会停止变化。
4、磁盘IO的计算是通过获取单位时间起始点所有磁盘总写入(读取)量之和并作差,公式大致为
(u为单位时间写入/读取内容大小,D为每个磁盘第二次总读/写量,d为每个磁盘第一次总读/写量) 所以程序当有多个储存设备连入系统时,只显示一对曲线。当你拔出某个设备时,磁盘读写数据可能出现一组负数。 5、注意:较新版本的python运行此程序的核心部分会出现无法关闭的错误,如果您使用的是python3.8以上的版本,请下载文末标有“for 较新版本的python”的脚本,或下载exe版本。
截图
以下是我的源码的核心部分(话说PyCharm真是强大,我直接把代码复制过来还给我上色了):
import matplotlib.pyplot as plt
import psutil
plt.ion()
plt.figure(1)
t_list = []
cpu_list = []
mem_list = []
disk_read = []
disk_read_bt = []
disk_written = []
disk_written_bt = []
net_sent = []
net_sent_bt = []
net_recv = []
net_recv_bt = []
t = 0 # 时间初始化
while True:
plt.subplot(1, 2, 1) # 第一部分
print(t_list)
a = psutil.cpu_percent() # 获取CPU与内存占用信息
b = (psutil.virtual_memory()[2])
cpu_list.append(a) # 将数据加入列表
mem_list.append(b)
t_list.append(t) # 刷新时间
t = t + 1
plt.subplots_adjust(wspace=0.3, left=0.1, right=0.95)
plt.plot(t_list, cpu_list, c='r', ls='-', marker=',', mec='b', mfc='w', label='CPU') # 绘制图像
plt.plot(t_list, mem_list, c='b', ls='-', marker=',', mec='b', mfc='w', label='Memory')
if t == 1 or t > 31: # 加入组件
plt.legend(loc='lower left')
plt.xlabel('time')
plt.ylabel('percent')
plt.title('Performance')
plt.grid()
plt.subplot(2, 2, 2) # 第二部分
c = (psutil.disk_io_counters()[2])
e = (psutil.disk_io_counters()[3])
disk_read.append(c)
disk_written.append(e)
d = (disk_read[len(disk_read) - 1] - disk_read[len(disk_read) - 2]) / 1048576
f = (disk_written[len(disk_written) - 1] - disk_written[len(disk_written) - 2]) / 1048576
disk_read_bt.append(d)
disk_written_bt.append(f)
plt.subplots_adjust(wspace=0.3, left=0.1, right=0.95)
plt.plot(t_list, disk_read_bt, c='y', ls='-', marker=',', mec='b', mfc='w', label='Disk read')
plt.plot(t_list, disk_written_bt, c='y', ls='-.', marker=',', mec='b', mfc='w', label='Disk written')
if t == 1 or t > 31: # 加入组件
plt.legend(loc='lower left')
plt.ylabel('MB')
plt.title('Disk and Network')
plt.grid()
plt.subplot(2, 2, 4) # 第三部分
g = (psutil.net_io_counters()[0])
i = (psutil.net_io_counters()[1])
net_sent.append(g)
net_recv.append(i)
h = (net_sent[len(net_sent) - 1] - net_sent[len(net_sent) - 2]) / 1024
j = (net_recv[len(net_recv) - 1] - net_recv[len(net_recv) - 2]) / 1024
net_sent_bt.append(h)
net_recv_bt.append(j)
plt.subplots_adjust(wspace=0.3, left=0.1, right=0.95)
plt.plot(t_list, net_sent_bt, c='g', ls='-', marker=',', mec='b', mfc='w', label='Net sent')
plt.plot(t_list, net_recv_bt, c='g', ls='-.', marker=',', mec='b', mfc='w', label='Net received')
if t == 1 or t > 31: # 加入组件
plt.legend(loc='lower left')
plt.ylabel('KB')
plt.xlabel('time')
plt.grid()
plt.pause(0.5) # 移动并刷新折线
if t > 30:
del (t_list[0])
del (cpu_list[0])
del (mem_list[0])
del (disk_read[0])
del (disk_read_bt[0])
del (disk_written[0])
del (disk_written_bt[0])
del (net_sent[0])
del (net_sent_bt[0])
del (net_recv[0])
del (net_recv_bt[0])
plt.clf()
|