美文网首页
[Python系列]Python获取CPU和内存利用率

[Python系列]Python获取CPU和内存利用率

作者: 测试你个头 | 来源:发表于2017-05-23 00:00 被阅读0次

    背景:在做客户端性能测试时,需要写UI自动化脚本去反复执行某一个业务动作,同时监控进程的cpu和内存使用率

    IDE:PyCharm
    OS:mac os X

    python通过第三方包psutil来获取cpu和内存信息

    1.通过pip安装psutil:

    sudo -H python -m pip install psutil
    

    2.获取指定进程的内存/CPU利用率:

    # 定义一个进程列表
    process_lst = []
    
    def getProcess(pName):
        # 获取当前系统所有进程id列表
        all_pids  = psutil.pids()
    
        # 遍历所有进程,名称匹配的加入process_lst
        for pid in all_pids:
            p = psutil.Process(pid)
            if (p.name() == pName):
                process_lst.append(p)
    
        return process_lst
    
    # 获取进程名位Python的进程对象列表
    process_lst = getProcess("Python")
    
    # 获取内存利用率:
    for process_instance in process_lst:
        print process_instance.memory_percent()
    
    # 获取cpu利用率:
    for process_instance in process_lst:
        process_instance.cpu_percent(None)
    
    sleep(2) 
    for process_instance in process_lst:
        print process_instance.cpu_percent(None)
    

    执行结果:这里Python进程有3个,所以内存和cpu利用率分别获取到了3个

    对于cpu利用率要额外说明:

    • 第一次调用process_instance.cpu_percent(None)得到的是0
    • 第二次调用process_instance.cpu_percent(None)得到的是从上一次调用同一个进程对象的cpu_percent(None)方法到第二次调用之间的cpu利用率(cpu利用率是计算一段时间内cpu计算时间/总时间)

    这里要注意是同一个进程对象,所以下面的代码是错误的:

    def getProcess(pName):
        # 获取当前系统所有进程id列表
        all_pids = psutil.pids()
        pid_lst = []
    
        # 遍历所有进程,名称匹配的加入process_lst
        for pid in all_pids:
            p = psutil.Process(pid)
            if (p.name() == pName):
                pid_lst.append(pid)
    
        return pid_lst
    
    
    pid_lst = getProcess("Python")
    
    # 获取cpu利用率:
    for pid in pid_lst:
        process_instance = psutil.Process(pid)
        process_instance.cpu_percent(None)
    
    sleep(0)
    for pid in pid_lst:
        process_instance = psutil.Process(pid)
        print process_instance.cpu_percent(None)
    

    执行结果:CPU利用率为0


    原因在于:2次对pid_lst的遍历,前后2次调用cpu_percent(None)的进程对象不是同一个,每次循环都会重新根据pid实例化一个新的进程对象

    3.获取系统的内存和CPU利用率

    # 系统的内存利用率
    print psutil.virtual_memory().percent
    
    # 系统的CPU利用率
    psutil.cpu_percent(None)
    
    sleep(3)
    print psutil.cpu_percent(None)
    

    执行结果:


    参考:
    psutil说明:https://github.com/giampaolo/psutil

    相关文章

      网友评论

          本文标题:[Python系列]Python获取CPU和内存利用率

          本文链接:https://www.haomeiwen.com/subject/qelixxtx.html