zoukankan      html  css  js  c++  java
  • Python 系统性能信息模块psutil

    psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、nice、ionice、iostat、iotop、uptime等,下面我们来安装psutil模块,学着使用它吧。

    一、psutil模块下载安装

    wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.1.tar.gz --no-check-certificate
    tar zxvf psutil-3.2.1.tar.gz 
    cd psutil-3.2.1
    sudo python setup.py install
    

    安装过程可能会报错:

    error: command 'gcc' failed with exit status 1
    

    解决办法:

    yum install gcc python-devel
    

    二、获取系统基本信息的使用

    CPU信息

    使用cpu_times方法获取cpu的完整信息

    >>> import psutil
    >>> psutil.cpu_times()
    scputimes(user=3447309.53, nice=21.43, system=980580.99, idle=45362374.85, iowait=1788.68, irq=1111.98, softirq=265913.85, steal=0.0, guest=0.0)
    >>>
    

    获取单个数据,如用户的cpu时间比

    >>> psutil.cpu_times().user
    3447363.5
    

    获取cpu物理和逻辑个数,默认logical值为True

    >>> psutil.cpu_count()
    16
    >>>psutil.cpu_count(logical=True)
    16
    >>>
    

    内存信息

    内存信息的获取主要使用virtual_memory方法。swap使用就用swap_memory方法。

    >>> mem=psutil.virtual_memory()
    >>> mem
    svmem(total=67556536320L, available=55213682688L, percent=18.3, used=31624036352L, free=35932499968L, active=12532486144, inactive=17918431232, buffers=338460672L, cached=18942722048)
    >>> mem.total
    67556536320L
    >>> print (mem.total/1024/1024)
    64426
    >>> mem.percent
    18.3
    

    其中percent表示实际已经使用的内存占比,即(67556536320-55213682688)/67556536320*100% 。available表示还可以使用的内存。

    磁盘信息

    磁盘信息主要有两部分,一个是磁盘的利用率,一个是io,他们分别可以通过disk_usage和disk_io_counters方法获取。
    如下先获取分区信息,然后看下根分区的使用情况。

    >>> psutil.disk_partitions()
    [sdiskpart(device='/dev/vda1', mountpoint='/', fstype='ext4', opts='rw,barrier=0'), sdiskpart(device='/dev/mapper/a8data-a8data01', mountpoint='/a8root', fstype='ext4', opts='rw')]
    >>>psutil.disk_usage('/a8root')     
    sdiskusage(total=517878185984, used=17773596672, free=473797914624, percent=3.4)
    

    默认disk_io_counters方法获取的是硬盘总的io数和读写信息,如果需要获取单个分区的io和读写信息加上"perdisk=True"参数。

    >>> psutil.disk_io_counters()
    sdiskio(read_count=21014, write_count=20875975, read_bytes=590727680, write_bytes=130111663616, read_time=50976, write_time=2089073404)
    >>> psutil.disk_io_counters(perdisk=True)
    {'vda1': sdiskio(read_count=19997, write_count=1408898, read_bytes=586012672, write_bytes=11122278400, read_time=38319, write_time=7592934), 'vdb1': sdiskio(read_count=528, write_count=4942088, read_bytes=2715136, write_bytes=59495226880, read_time=6220, write_time=69064717), 'dm-0': sdiskio(read_count=489, write_count=14525203, read_bytes=1999872, write_bytes=59495215104, read_time=6437, write_time=2012416185)}
    >>>
    

    网络信息

    网络io和磁盘io使用方法差不多,主要使用net_io_counters方法,如果需要获取单个网卡的io信息,加上pernic=True参数。

    >>> psutil.net_io_counters()
    snetio(bytes_sent=1027533635976, bytes_recv=10363004808910, packets_sent=18875716061, packets_recv=34977009187, errin=0, errout=0, dropin=0, dropout=0)
    >>> psutil.net_io_counters(pernic=True)
    {'lo': snetio(bytes_sent=14576204221, bytes_recv=14576204221, packets_sent=131553294, packets_recv=131553294, errin=0, errout=0, dropin=0, dropout=0), 'eth1': snetio(bytes_sent=63177055, bytes_recv=5816278780, packets_sent=672307, packets_recv=86605286, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=1012900174490, bytes_recv=10342662275409, packets_sent=18743598665, packets_recv=34759041422, errin=0, errout=0, dropin=0, dropout=0)}
    

    其他系统信息

    除了前面介绍的几个获取系统基本信息的方法,psutil模块还支持获取用户登录、开机时间等信息

    >>> import psutil
    >>> import datetime
    >>> psutil.users()
    [suser(name='root', terminal='pts/0', host='10.46.176.245', started=1465088896.0)]
    >>> psutil.boot_time()
    1461928264.0
    >>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
    '2016-04-29 19:11:04'
    

    三、编写脚本,展示系统信息

    #!/usr/bin/env python
    #-*- coding:UTF-8 -*-
    
    import psutil
    import time
    
    def Sysinfo():
        #CPU 
        User_Num = psutil.cpu_times().user/100000
        CPU_Num1 = psutil.cpu_count()
        CPU_Num2 = psutil.cpu_count(logical=False)
        CPU_percent = psutil.cpu_percent()
    
        #Boot_time
        Boot_start = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(psutil.boot_time()))
    
        #Memory
        RAM_Total = int(psutil.virtual_memory().total/(1024*1024))
        Total_percent = psutil.virtual_memory().percent
        RAM_Free = int(psutil.swap_memory().total/(1024*1024))
        Free_percent = psutil.swap_memory().percent
    
        #Net
        Net_Bytes_sent = psutil.net_io_counters().bytes_sent
        Net_Bytes_recv = psutil.net_io_counters().bytes_recv
        Net_Pack_sent = psutil.net_io_counters().packets_sent
        Net_Pack_recv = psutil.net_io_counters().packets_recv
        BFH = r'%'
    
        print " 33[1;32m开机时间:%s33[1;m" % Boot_start
        print " 33[1;32muser的CPU时间比:%s%s33[1;m" % (User_Num,BFH)
        print " 33[1;32mCPU的物理个数:%s33[1;m" % CPU_Num1
        print " 33[1;32mCPU的逻辑个数:%s33[1;m" % CPU_Num2
        print " 33[1;32mCPU使用百分比:%s%s33[1;m" % (CPU_percent,BFH)
        print " 33[1;32m物理内存:%sM	 使用率:%s%s33[1;m" % (RAM_Total,Total_percent,BFH)
        print " 33[1;32mswap内存:%sM	 使用率:%s%s33[1;m" % (RAM_Free,Free_percent,BFH)
        print " 33[1;32m发送字节:%s Byte	  发送包数:%s 个33[1;m" % (Net_Bytes_sent,Net_Pack_sent)
        print " 33[1;32m接收字节:%s Byte	  接收包数:%s 个33[1;m" % (Net_Bytes_recv,Net_Pack_recv)
    
        #disk
        for i in psutil.disk_partitions():
            print " 33[1;32m盘符:%s  挂载点:%s 使用率:%s%s33[1;m" % (i[0],i[1],psutil.disk_usage(i[1])[3],BFH)
    
    if __name__ == "__main__":
        Sysinfo()
    

    运行结果:

    [root@iZ253hr56zqZ scripts]# python test.py 
     开机时间:2016-04-29 19:11:04
     user的CPU时间比:34.4929039%
     CPU的物理个数:16
     CPU的逻辑个数:16
     CPU使用百分比:50.0%
     物理内存:64426M	 使用率:18.6%
     swap内存:16383M	 使用率:0.0%
     发送字节:1027740820366 Byte	  发送包数:18879505652 个
     接收字节:10364859088754 Byte	  接收包数:34983813008 个
     盘符:/dev/vda1  挂载点:/ 使用率:26.6%
     盘符:/dev/mapper/a8data-a8data01  挂载点:/a8root 使用率:3.4%
    
  • 相关阅读:
    增量+全量备份SVN服务器
    日常小命令集锦
    filebeat输出到kafka
    在Logstash的配置文件中对日志事件进行区分
    NFS服务器简易安装
    记录一次MySQL数据库CPU负载异常高的问题
    使用Spring的jdbcTemplate进一步简化JDBC操作
    Stream 和 byte[] 之间的转换
    C# 文件转byte数组,byte数组再转换文件
    groupbox里面添加Form
  • 原文地址:https://www.cnblogs.com/migongci0412/p/5560096.html
Copyright © 2011-2022 走看看