psutil学习笔记

1、简介
psutil是一个跨平台库,能够轻松实现获取该系统运行的进程和(包括CPU内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。
2、安装

[root@master ~]# yum install psutil -y
Loaded plugins: fastestmirror, priorities
Repository base is listed more than once in the confi
gurationRepository updates is listed more than once in the co
nfiguration

3、获取系统性能信息
1)CPU信息

>>> import psutil
>>> psutil.cpu_times()
scputimes(user=132.55, nice=0.27, system=283.51, id
 iowait=47.89, irq=0.02, softirq=78.89, steal=0.0, est_nice=0.0)
>>> psutil.cpu_count()
1
>>> psutil.cpu_count(logical=False)
1
>>> psutil.cpu_times().user
132.6

2)内存信息

>>> mem=psutil.virtual_memory()
>>> mem
svmem(total=1027235840L, available=775274496L, perc
d=629661696L, free=397574144L, active=289521664, in784, buffers=1110016L, cached=376590336)>>> mem.total
1027235840L
>>> mem.free
397574144L
>>> psutil.swap_memory()
sswap(total=2147479552L, used=0L, free=2147479552L,
 sin=0, sout=0)

3)磁盘信息

>>> psutil.disk_partitions()
[sdiskpart(device='/dev/mapper/centos-root', mountp
ype='xfs', opts='rw,seclabel,relatime,attr2,inode64diskpart(device='/dev/sda1', mountpoint='/boot', fspts='rw,seclabel,relatime,attr2,inode64,noquota')]
>>> psutil.disk_usage('/')
sdiskusage(total=18746441728, used=2451730432, free
 percent=13.1)
>>> psutil.disk_io_counters()
sdiskio(read_count=18179, write_count=73898, read_bytes=50116096
0, write_bytes=642362368, read_time=194587, write_time=4109123)
>>> psutil.disk_io_counters(perdisk=True)
{'sr0': sdiskio(read_count=11, write_count=0, read_bytes=45056, write_b
ytes=0, read_time=11, write_time=0), 'dm-1': sdiskio(read_count=221, write_count=0, read_bytes=905216, write_bytes=0, read_time=454, write_time=0), 'sda2': sdiskio(read_count=7772, write_count=32609, read_bytes=248414208, write_bytes=320684032, read_time=95052, write_time=1394915), 'dm-0': sdiskio(read_count=8117, write_count=39476, read_bytes=247078912, write_bytes=320684032, read_time=97658, write_time=2714882), 'sda1': sdiskio(read_count=2058, write_count=2051, read_bytes=4717568, write_bytes=2098176, read_time=1412, write_time=565)}

4)网络信息

>>> psutil.net_io_counters()
snetio(bytes_sent=4644541, bytes_recv=34730753, packets_sent=37696, pac
kets_recv=109267, errin=0, errout=0, dropin=0, dropout=0)
>>> psutil.net_io_counters(pernic=True)
{'lo': snetio(bytes_sent=90589, bytes_recv=90589, packets_sent=856, pac
kets_recv=856, errin=0, errout=0, dropin=0, dropout=0), 'eth1': snetio(bytes_sent=2176138, bytes_recv=3656120, packets_sent=12283, packets_recv=14607, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=2385076, bytes_recv=30990817, packets_sent=24619, packets_recv=93886, errin=0, errout=0, dropin=0, dropout=0)}

5)其他系统信息

>>> psutil.users()
[suser(name='root', terminal='tty1', host='', started=1524298240.0), su
ser(name='root', terminal='pts/0', host='192.168.157.1', started=1524336512.0), suser(name='root', terminal='pts/1', host='192.168.157.1', started=1524838528.0)]
>>> psutil.boot_time()
1524726143.0

4、系统进程管理方法
获得当前系统的进程信息,这些进程信息,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO信息、socket连接、线程数等。
1)进程信息

>>> import psutil
>>> psutil.pids()
[1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2
5, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 
>>> p=psutil.Process(2503)
>>> p.name()
'master'
>>> p.exe()
'/usr/libexec/postfix/master'
>>> p.cwd()
'/var/spool/postfix'
>>> p.status()
'sleeping'
>>> p.create_time()
1524726167.96
>>> p.uids()
puids(real=0, effective=0, saved=0)
>>> p.gids()
pgids(real=0, effective=0, saved=0)
>>> p.cpu_times()
pcputimes(user=0.16, system=1.43)
>>> p.cpu_affinity()
[0]
>>> p.memory_percent()
0.21611707005861477
>>> p.memory_info()
pmem(rss=2220032, vms=93777920)
>>> p.io_counters()
pio(read_count=103962, write_count=16951, read_bytes=3321856, write_bytes=5132288)
>>> p.io_counters()
pio(read_count=103964, write_count=16953, read_bytes=3321856, write_bytes=5132288)
>>> p.connections()
[pconn(fd=13, family=2, type=1, laddr=('127.0.0.1', 25), raddr=(), status='LISTEN')
, pconn(fd=14, family=10, type=1, laddr=('::1', 25), raddr=(), status='LISTEN')]
>>> p.num_threads()
1

2)popen类的使用
作用:获取用户启动的应用程序进程信息,以便跟踪程序进程的运行状态。

>>> from subprocess import PIPE
>>> p.name()
'master'
>>> p.username()
'root'
>>> p=psutil.Popen(["/usr/bin/python","-c","print('hello world')"],stdout=PIPE)
>>> p.communicate()
('hello world\n', None)

猜你喜欢

转载自blog.csdn.net/qq_21127151/article/details/80114925