使用Python获取系统相关信息

一、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))

运行信息:

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值