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时间

 

原文地址:https://www.cnblogs.com/Jabe/p/8799242.html