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

    内容目录:

      • 简介
      • psutil模块
        • 安装

        • 基本使用

        •  

          获取系统总内存和使用内存

        • 获取主机cpu核数和物理cpu个数

        • 获取磁盘信息

        • 获取网络信息

        • 获取用户登录信息

        • 获取系统开机时间

        • 获取系统进程信息

    简介

          psutil 是一个垮平台库,能够轻松实现获取系统运行的进程和系统利用率(CPU、内存、磁盘、网络等)信息。通过它实现率同等命令行工具提供的功能,ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。支持32位及64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统,2.4以上的python版本。

     psutil使用

    1、源码安装步骤

    wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz 
    tar zxf psutil-2.0.0.tar.gz 
    cd psutil-2.0.0
    python setup.py  install 
    

    2、基本使用

    psutil获取内存等信息大小单位一般都采用字节方式

    1)获取系统总内存和使用内存

    mem =  psutil.virtual_memory() #内存总信息
    mem.total #总内存
    8589934592L
    mem.used #系统使用内存
    6736408576L
    psutil.swap_memory() #swap总信息
    sswap(total=3221225472L, used=1972371456L, free=1248854016L, percent=61.2, sin=54952632320L, sout=3776888832L)  
    

    2)获取主机cpu核数和物理cpu个数 

    import psutil
    psutil.cpu_count() #cpu逻辑个数
    4
    psutil.cpu_count(logical=False) #cpu物理个数
    2
    

    3)获取磁盘信息

            在系统的所有磁盘中我们关注的笔调多的是磁盘的使用率和io信息,磁盘的利用率可以用psutil.disk_usage方法获取。磁盘的IO信息可以通过psutil.disk_io_counters()获取,其中io信息包括

    read_count:读io数

    write_count:写io数

    read_bytes:IO读字节数

    write_byte:IO写字节数

    read_time:磁盘读时间

    write_time:磁盘写时间

    >>> psutil.disk_partitions() #获取磁盘分区读写信息等
    [sdiskpart(device='/dev/vda1', mountpoint='/', fstype='ext4', opts='rw,relatime,data=ordered')]
    >>> 
    >>> psutil.disk_usage('/') #获取根目录磁盘使用情况,参数为路径path
    sdiskusage(total=120108089344, used=108555464704, free=11290480640, percent=90.4)
    >>> 
    >>> psutil.disk_io_counters() #获取硬盘总的io个数、读写信息
    sdiskio(read_count=4699627L, write_count=2000421L, read_bytes=98468618240L, write_bytes=66542867456L, read_time=2026157L, write_time=612921L)
    >>> psutil.disk_io_counters(perdisk=True) #perdisk=True参数获取单个分区IO个数、读写信息
    {'disk0': sdiskio(read_count=4700548L, write_count=2001237L, read_bytes=98479378432L, write_bytes=66562835456L, read_time=2026586L, write_time=613130L)}
    >>> 

    4)获取网络信息

    系统网络信息与磁盘io类似,获取的各个字段数据含义

    bytes_sent:发送字节数

    bytes_recv:接收字节数

    packets_sent:发送数据包数

    packets_recv:接收数据包数

    >>> psutil.net_io_counters()#网络进出数据总IO信息  
    snetio(bytes_sent=745142254L, bytes_recv=4592756042L, packets_sent=4926867L, packets_recv=5772501L, errin=0L, errout=0L, dropin=0L, dropout=0)
    >>> psutil.net_io_counters().bytes_sent
    745202707L
    >>> psutil.net_io_counters(pernic=True)  #输出单个网口的IO信息
    {'gif0': snetio(bytes_sent=0L, bytes_recv=0L, packets_sent=0L, packets_recv=0L, errin=0L, errout=0L, dropin=0L, dropout=0), 'utun0': snetio(bytes_sent=268L, bytes_recv=0L, packets_sent=3L, packets_recv=0L, errin=0L, errout=0L, dropin=0L, dropout=0), 'bridge0': snetio(bytes_sent=0L, bytes_recv=0L, packets_sent=0L, packets_recv=0L, errin=0L, errout=0L, dropin=0L, dropout=0), 'en0': snetio(bytes_sent=711968154L, bytes_recv=4560084221L, packets_sent=4457290L, packets_recv=5303595L, errin=0L, errout=0L, dropin=0L, dropout=0), 'en1': snetio(bytes_sent=0L, bytes_recv=0L, packets_sent=0L, packets_recv=0L, errin=0L, errout=0L, dropin=0L, dropout=0), 'lo0': snetio(bytes_sent=33112941L, bytes_recv=33112941L, packets_sent=469278L, packets_recv=469278L, errin=0L, errout=0L, dropin=0L, dropout=0), 'utun1': snetio(bytes_sent=77994L, bytes_recv=94413L, packets_sent=759L, packets_recv=416L, errin=0L, errout=0L, dropin=0L, dropout=0), 'p2p0': snetio(bytes_sent=0L, bytes_recv=0L, packets_sent=0L, packets_recv=0L, errin=0L, errout=0L, dropin=0L, dropout=0), 'stf0': snetio(bytes_sent=0L, bytes_recv=0L, packets_sent=0L, packets_recv=0L, errin=0L, errout=0L, dropin=0L, dropout=0), 'awdl0': snetio(bytes_sent=72716L, bytes_recv=0L, packets_sent=325L, packets_recv=0L, errin=0L, errout=0L, dropin=0L, dropout=0)}
    >>> 
    

    5)获取用户登录信息

    >>> psutil.users()
    [suser(name='user1', terminal='console', host=None, started=1522855040.0)]
    

    6)获取系统开机时间

    >>> psutil.boot_time() #返回系统系统开机时间戳
    1522855040.0
    >>> import datetime
    >>> datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H:%M:%S") #转换为标准格式
    '2018-04-04 23:17:20'
    

    7)获取系统进程信息

           通过获取的进程信息可以知道应用程序的运行状态,包括进程的启动时间、查看或设置cpu亲和度、内存使用率、IO信息、socket链接、线程数等,这些信息可以呈现出指定进程是否存活、资源利用情况。

    • 进程信息

             使用psutil.pids()方法获取所有的进程PID,使用psutil.Process()方法可以获取单个进程的名称、路径、状态、系统资源利用率等。

    >>> import psutil
    >>> psutil.pids()
    [1, 2, 3, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 25, 26, 27, 28, 36, 38, 39, 40, 59, 91, 224, 233, 234, 235, 236, 239, 248, 259, 260, 327, 346, 431, 443, 466, 468, 471, 472, 477, 483, 490, 760, 823, 1069, 1074, 1104, 1303, 1332, 1487, 4966, 6312, 7600, 7804, 8015, 11557, 11559, 11560, 11561, 11562, 11563, 11573, 11597, 11785, 12058, 22552, 22554, 22638, 22642, 22654, 22706, 22823, 22825, 22842, 22847, 22849, 22875, 22899, 22933, 22934, 22937, 22954, 22956, 22976, 31834]
    >>> psutil.Process(11557)
    psutil.Process(pid=11557, name='php-fpm', started='2018-03-07 09:33:03')
    >>> 
    p.name()   #进程名
    p.exe()    #进程的bin路径
    p.cwd()    #进程的工作目录绝对路径
    p.status()   #进程状态
    p.create_time()  #进程创建时间
    p.uids()    #进程uid信息
    p.gids()    #进程的gid信息
    p.cpu_times()   #进程的cpu时间信息,包括user,system两个cpu信息
    p.cpu_affinity()  #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
    p.memory_percent()  #进程内存利用率
    p.memory_info()    #进程内存rss,vms信息
    p.io_counters()    #进程的IO信息,包括读写IO数字及参数
    p.connectios()   #返回进程列表
    p.num_threads()  #进程开启的线程数
    • popen类的使用 

             psutil提供的popen类的作用是获取用户启动的应用程序进程信息,以便跟踪程序进程的运行状态。

    >>> import psutil
    >>> from subprocess import PIPE
    #通过psutil 的Popen方法启动的应用程序,可以跟踪该程序运行的所有相关信息
    >>> p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
    >>> p.name()
    'python'
    >>> p.username()
    'root'
    >>> p.communicate()
    ('hello
    ', None)
    >>> p.cpu_times() #获得进程运行的cpu时间
    

     

  • 相关阅读:
    《命运赋》
    CSS3中的 transform (变形)+Transition(转换) = animation(动画)
    c#进阶之泛型
    正则表达式运用
    查询某时间段的统计数据
    很好用的request转换为实体方法还有判断实体所有参数不能为空的方法
    http 协议集合,超级简单
    今天无意发现jquery的一个以前的误导
    IFRAM随内部长宽高变化
    就最近学习MVC4.0的页面用法学到的东西
  • 原文地址:https://www.cnblogs.com/Jabe/p/8799242.html
Copyright © 2011-2022 走看看