一、psutil模块
psutil可以获取系统内存、磁盘、网络、gpu、平均负载等信息。
二、基本使用
https://pypi.org/project/psutil/
三、平均负载
1、系统负载System load :系统CPU繁忙程度的度量,即还有多少个进程等待CPU的调度
2、平均负载load average :一段时间内的平均负载,这个一段时间一般取1分钟、5分钟、15分钟
查看命令如下:
命令1 :top
查看上图可以看出
1分钟的平均负载是 0.22 5分钟平均负载是0.07 15分钟的平均负载是0.02
命令2:uptime
也可以看出1分钟的平均负载是 0.06, 5分钟平均负载是0.05, 15分钟的平均负载是0.02
命令3 cat /proc/loadavg
除了前3个数字表示平均负载外,后面的1个分数,分母表示系统进程总数,分子表示正在运行的进程数;最后一个数字表示最近运行的进程ID
单核
- Load<1:没有等待
- Load==1:系统已无额外的资源跑更多的进程了
- Load>1:进程都堵着等待资源
注:需要警惕的
- Load < 0.7时:系统很闲,要考虑多部署一些服务
- 0.7 < Load < 1时:系统状态不错
- Load == 1时:系统马上要处理不多来了,赶紧找一下原因
- Load > 5时:系统已经非常繁忙了
不同Load值说明的问题
1)1分钟Load>5,5分钟Load<1,15分钟Load<1
短期内繁忙,中长期空闲,初步判断是一个抖动或者是拥塞前兆
2)1分钟Load>5,5分钟Load>1,15分钟Load<1
短期内繁忙,中期内紧张,很可能是一个拥塞的开始
3)1分钟Load>5,5分钟Load>5,15分钟Load>5
短中长期都繁忙,系统正在拥塞
4)1分钟Load<1,5分钟Load>1,15分钟Load>5
短期内空闲,中长期繁忙,不用紧张,系统拥塞正在好转
三、使用实例:获取一些系统相关信息
import psutil
import pynvml
def get_gpu_info():
try:
pynvml.nvmlInit()
deviceCount = pynvml.nvmlDeviceGetCount()
gpu_list = []
for i in range(deviceCount):
gpu_list.append(i)
total_mem = 0
used_mem = 0
for gpu_id in gpu_list:
handle = pynvml.nvmlDeviceGetHandleByIndex(gpu_id)
info = pynvml.nvmlDeviceGetMemoryInfo(handle)
total_mem += info.total
used_mem += info.used
pynvml.nvmlShutdown()
gpu_info = used_mem / total_mem * 100
except Exception as e:
gpu_info = '无GPU'
return gpu_info
def get_network_info():
n = psutil.net_io_counters()
before = n.bytes_recv # 接收字节数
time.sleep(1)
after = psutil.net_io_counters()
res = round((after.bytes_recv - before) / 1024, 2)
return ('{}KB/s'.format(res))
def get_load_avg():
try:
import subprocess
tmp = subprocess.getstatusoutput('uptime')
load_avg = tmp[-1].split(',')[-2].strip()
except Exception as e:
load_avg = 0
return load_avg
def get_status():
try:
mem = psutil.virtual_memory().percent
cpu = psutil.cpu_percent(0)
gpu = get_gpu_info()
network = get_network_info()
load_avg = get_load_avg()
total = 0
used = 0
disks = psutil.disk_partitions(all=False)
for i in range(0, len(disks)):
partition = disks[i][1]
tmp = psutil.disk_usage(partition)[0]
total = total + tmp
tmp1 = psutil.disk_usage(partition)[1]
used = used + tmp1
disk = used / float(total) * 100
except Exception as e:
cpu = mem = disk = load_avg = 0
network = '0KB/s'
gpu = '无GPU'
return load_avg, network, gpu, cpu, mem, disk
if __name__ == '__main__':
load_avg, network, gpu, cpu, memory, disk = get_status()
print('平均负载:{}, 网速:{}, gpu:{}%, cpu:{}%, 内存:{}%, 磁盘:{}%'.format(load_avg, network, gpu, cpu, memory, disk))
运行信息: