*****************************
本文所有内容仅供学习交流使用,欢迎留言共同学习进步。。。。。
*****************************
关于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空闲状态的时间百分比
***********idle:CPU处于idle状态的时间百分比
>>> psutil.cpu_times().user
83.329999999999998
***********其他信息的获取加上对于的名称即可
***********CPU物理和逻辑个数获取如下,默认的logical值为True
>>> psutil.cpu_count()
4
>>> psutil.cpu_count(logical=False)
4
2、内存信息获取
***********内存信息的获取主要使用virtual_memory,swap主要使用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_usage和disk_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() #进程开启的线程数
听过psutil的Popen方法启动应用程序,可以跟踪程序的相关信息
from subprocess import PIPE p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
p.name()
p.username()