*****************************

    本文所有内容仅供学习交流使用,欢迎留言共同学习进步。。。。。

*****************************

    关于psutil模块的作用和安装介绍,在这样就不费话,请自行百度,资料还是很多的,我总结的大部分也是抄了别人的,只是加上了我自已的思想,内容上可能更全面,后序会有时间会继续补充,欢迎留言总结。。。。

    实验环境:centos6.5 python2.6 psutil4.3    

轻松获取磁盘、网络、CPU、内存等信息,应用于系统监控、分析和限制系统资源及进程的管理。等同于命令行工具ps,top,who,df,kill,df等,大小单位一般采用字节计算。

1、获取CPU信息

***********CPU完整信息的获取一般用cpu_times方法

>>> psutil.cpu_times()

scputimes(user=83.269999999999996, nice=0.0, system=71.159999999999997, idle=10073.77, iowait=51.479999999999997, irq=0.37, softirq=11.609999999999999, steal=0.0, guest=0.0)

***********user time:执行用户进程的时间白分比

***********system time:执行内核进程和中断的时间白分比

***********iowait:由于IO等待而使CPU处于idle空闲状态的时间百分比

***********idleCPU处于idle状态的时间百分比

>>> psutil.cpu_times().user

83.329999999999998

***********其他信息的获取加上对于的名称即可

***********CPU物理和逻辑个数获取如下,默认的logical值为True

>>> psutil.cpu_count()

4

>>> psutil.cpu_count(logical=False)

4

2、内存信息获取

***********内存信息的获取主要使用virtual_memoryswap主要使用swap_memory方法

>>> mem = psutil.virtual_memory()

>>> mem

svmem(total=4002598912, available=3468185600, percent=13.4, used=786452480, free=3216146432, active=478048256, inactive=175960064, buffers=14032896, cached=238006272, shared=241664)

>>> mem.total

4002598912

***********其他信息的获取加上对于的名称即可

***********默认获取的单位为字节,补充 1B(字节)=8Bit(比特,二进制) 1KB=1024B 1M=1024KB

>>> print (mem.total/1024/1024)

3817

 

3、硬盘信息的获取

***********磁盘的利用率和io,获取方法分别为disk_usagedisk_io_counters

>>> psutil.disk_partitions()

[sdiskpart(device='/dev/mapper/VolGroup-lv_root', mountpoint='/', fstype='ext4', opts='rw'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='ext4', opts='rw')]

************获取特定分区信息

>>> psutil.disk_usage('/')

sdiskusage(total=29138886656, used=2213924864, free=25444794368, percent=8.0)

>>> psutil.disk_io_counters()

sdiskio(read_count=27337, write_count=5490, read_bytes=503639040, write_bytes=34735104, read_time=196088, write_time=133960, read_merged_count=2308, write_merged_count=2989, busy_time=138225)

**************psutil.disk_io_counters方法获取的是硬盘总的io数和读取信息,单个的获取加如下参数

>>> psutil.disk_io_counters(perdisk=True)

{'dm-1': sdiskio(read_count=297, write_count=0, read_bytes=1216512, write_bytes=0, read_time=625, write_time=0, read_merged_count=0, write_merged_count=0, busy_time=129), 'sda2': sdiskio(read_count=12356, write_count=1248, read_bytes=250827776, write_bytes=17362944, read_time=66202, write_time=27460, read_merged_count=2066, write_merged_count=2989, busy_time=68652), 'dm-0': sdiskio(read_count=14089, write_count=4239, read_bytes=249193472, write_bytes=17362944, read_time=128287, write_time=106420, read_merged_count=0, write_merged_count=0, busy_time=68391), 'sda1': sdiskio(read_count=595, write_count=3, read_bytes=2401280, write_bytes=9216, read_time=974, write_time=80, read_merged_count=242, write_merged_count=0, busy_time=1053)}

>>>

 

4、网络信息的获取

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

>>> psutil.net_io_counters()

snetio(bytes_sent=1505767261, bytes_recv=758446854, packets_sent=661923, packets_recv=398386, errin=0, errout=0, dropin=0, dropout=0)

>>> psutil.net_io_counters(pernic=True)

{'lo': snetio(bytes_sent=740519540, bytes_recv=740519540, packets_sent=110160, packets_recv=110160, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=765273135, bytes_recv=17943634, packets_sent=551832, packets_recv=288318, errin=0, errout=0, dropin=0, dropout=0)}

>>>

 

5、获取开机时间,当前登录用户,当前系统时间

>>> psutil.users()

[suser(name='root', terminal='pts/0', host='192.168.78.1', started=1475764224.0), suser(name='root', terminal='pts/1', host='192.168.78.1', started=1475764224.0), suser(name='root', terminal='pts/2', host='192.168.78.1', started=1475764224.0), suser(name='root', terminal='pts/3', host='192.168.78.1', started=1475764224.0)]

>>> psutil.boot_time()

1475764119.0

>>> import datetime

>>> datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S")

'2016-10-06 22: 28: 39'

>>>

 

6、查看系统全部进程

>>> psutil.pids()

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 74, 75, 76, 77, 78, 80, 81, 111, 181, 182, 183, 186, 187, 327, 329, 346, 347, 432, 539, 741, 742, 777, 790, 981, 1030, 1046, 1058, 1096, 1172, 1180, 1184, 1185, 1195, 1197, 1199, 1201, 1203, 1205, 1213, 1214, 1215, 1219, 1235, 1239, 1255, 1259, 1275, 1279, 1297, 1332, 1348, 1357, 1362]

*******************查看单个进程

>>> p = psutil.Process(1362)   *****数字为上述的进程号

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() #进程开启的线程数

听过psutilPopen方法启动应用程序,可以跟踪程序的相关信息

from subprocess import PIPE p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)

p.name()

p.username()