Python psutil模块的使用介绍
https://www.cndba.cn/Expect-le/article/390
psutil是一个Python模块,是一个跨平台库(windows一样好使),用来获取正在运行的进程信息和系统的CPU和内存的利用率。
采集数据非常好用。
https://www.cndba.cn/Expect-le/article/390
1.安装psutil
这里使用pip安装简单https://www.cndba.cn/Expect-le/article/390
1.1首先安装pip
yum install gcc python-devel python-pip -y
1.2安装psutilhttps://www.cndba.cn/Expect-le/article/390
#Linux下
[root@ceph-osd1 ~]# pip install psutil
Collecting psutil
Using cached psutil-5.0.0.zip
Installing collected packages: psutil
Running setup.py install for psutil ... done
Successfully installed psutil-5.0.0
#Windows下
C:/Python27/python.exe -m pip install psutil
2.使用实例
2.1查看CPU具体信息
>>> import psutil
>>> psutil.cpu_times()
scputimes(user=16945.78, nice=8.31, system=12286.74, idle=525633.11, iowait=2711.71, irq=0.0, softirq=3427.71, steal=0.0, guest=0.0, guest_nice=0.0)
#获取cpu逻辑个数https://www.cndba.cn/Expect-le/article/390
>>> psutil.cpu_count()
1
#获取cpu物理个数
>>> psutil.cpu_count(logical=False)
1
2.2读取内存信息
linux系统内存利用率信息涉及to-tal(内存总数),used(以使用内存),free(空闲内存),buffers(缓冲使用数)
cache(缓存使用数),swap(交换分区使用数),分别使用psutil.virtual_memory()与psuti.swap_memory()方法获取
>>> mem = psutil.virtual_memory()
#总内存大小 --单位都是字节
https://www.cndba.cn/Expect-le/article/390
>>> mem.total
1041264640
>>> mem.free
159834112
#获取swap信息
>>> psutil.swap_memory()
sswap(total=2147479552, used=22384640, free=2125094912, percent=1.0, sin=3399680, sout=24952832)
2.3读取磁盘参数
磁盘利用率使用psutil.disk_usage方法获取,磁盘IO信息包括read_count(读IO数),write_count(写IO数)
read_bytes(IO写字节数),read_time(磁盘读时间),write_time(磁盘写时间)
#获取IO信息https://www.cndba.cn/Expect-le/article/390
>>> psutil.disk_io_counters()
sdiskio(read_count=126414, write_count=5959605, read_bytes=43564289024, write_bytes=185718603264, read_time=2909894, write_time=23657996, read_merged_count=747, write_merged_count=1044596, busy_time=16106728)
#获取磁盘完整信息
>>> psutil.disk_partitions()
[sdiskpart(device='/dev/mapper/centos-root', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'), sdiskpart(device='/dev/sdc1', mountpoint='/var/lib/ceph/osd/ceph-1', fstype='xfs', opts='rw,noatime,attr2,inode64,noquota'), sdiskpart(device='/dev/sdb1', mountpoint='/var/lib/ceph/osd/ceph-0', fstype='xfs', opts='rw,noatime,attr2,inode64,noquota'), sdiskpart(device='/dev/sdd1', mountpoint='/var/lib/ceph/osd/ceph-2', fstype='xfs', opts='rw,noatime,attr2,inode64,noquota')]
#获取分区表信息
>>> psutil.disk_usage('/')--#获取/分区的状态
sdiskusage(total=50940104704, used=2693271552, free=48246833152, percent=5.3)
>>> psutil.disk_io_counters()
sdiskio(read_count=126568, write_count=5960229, read_bytes=43572325376, write_bytes=185722119680, read_time=2911178, write_time=23659285, read_merged_count=747, write_merged_count=1044728, busy_time=16107656)
#获取单个分区IO个数
>>> psutil.disk_io_counters(perdisk=True)
2.4获取网络信息
网络信息与磁盘IO信息类似,包括byes_sent(发送字节数),byte_recv=xxx(接受字节数),
pack-ets_sent=xxx(发送字节数),pack-ets_recv=xxx(接收数据包数)
#获取网络总IO信息
>>> psutil.net_io_counters()
snetio(bytes_sent=38754579048, bytes_recv=13648108385, packets_sent=91331284, packets_recv=80897156, errin=0, errout=0, dropin=709, dropout=0
#获取网络每个接口的信息
>>> psutil.net_io_counters(pernic=True) --pernic=True输出网络每个接口信息
{'lo': snetio(bytes_sent=3737111141, bytes_recv=3737111141, packets_sent=21164281, packets_recv=21164281, errin=0, errout=0, dropin=0, dropout=0), 'enp0s3': snetio(bytes_sent=35018910318, bytes_recv=9911742478, packets_sent=70172206, packets_recv=59737784, errin=0, errout=0, dropin=709, dropout=0)}
2.5获取当前系统用户登录信息
>>> psutil.users()
[suser(name='root', terminal='pts/0', host='192.168.1.26', started=1479864320.0), suser(name='root', terminal='pts/1', host='192.168.1.26', started=1479864576.0)]
#查看所有用户
>>> users_count = len(psutil.users())
>>> users_list = ",".join([ u.name for u in psutil.users()])
>>> print u"当前有%s个用户,分别是%s"%(users_count, users_list)
当前有3个用户,分别是root,root,root
2.6获取开机时间
>>> import psutil, datetime
>>> psutil.boot_time() --#以linux时间格式返回
1479292540.0
>>> datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S") --转换成自然时间格式
'2016-11-16 05: 35: 40'
2.7系统进程管理
获取当前系统的进程信息,获取当前应用程序的运行状态,包括进程的启动时间,查看设置CPU亲和度,内存使用率,IO信息
socket连接,线程数等
#获取进程信息
psutil模块在获取进程方面有很好的支持,使用psutil.pids()方法获取所有进程的PID,使用psutil.Process()方法获取单个进程的名称,路径状态等
https://www.cndba.cn/Expect-le/article/390
#查看系统全部进程
psutil.pids()
[1, 2, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30, 31, 39, 41, 42, 43, 63, 94, 258, 261, 263, 264, 265, 266, 267, 269, 270, 271, 272, 274, 276, 277, 367, 368, 379, 380, 393, 394, 395, 396, 397, 398, 399, 470, 489, 495, 594, 595, 596, 597, 598, 609, 642, 643, 645, 669, 682, 684, 705, 706, 739, 740, 741, 742, 743, 944, 945, 1064, 1481, 2272, 2273, 2274, 2275, 2276, 2435, 2461, 2586, 2587, 2588, 2589, 2592, 4053, 4055, 4056, 5516, 9219, 9980, 11994, 11996, 13546, 13550, 14095, 14926, 14928, 20049, 20159, 25286, 27880, 29360, 32077, 32097]
查看单个进程
>>> p = psutil.Process(4053)
>>> p.name() #进程名
'ceph-osd'
>>> p.exe() #进程的bin路径
'/usr/bin/ceph-osd'
>>> p.cwd() #进程的工作目录绝对路径
'/'
>>> p.status() #进程状态
'sleeping'
>>> p.create_time() #进程创建时间
1479299324.06
>>> p.uids() #进程uid信息
puids(real=167, effective=167, saved=167)
>>> p.gids() #进程的gid信息
pgids(real=167, effective=167, saved=167)
>>> p.cpu_times() #进程的cpu时间信息,包括user,system两个cpu信息
pcputimes(user=727.33, system=2196.36, children_user=0.02, children_system=0.03)
>>> p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
[0]
>>> p.memory_percent() #进程内存利用率
7.968058533131404
>>> p.memory_info() #进程内存rss,vms信息
pmem(rss=82968576, vms=1063407616, shared=2506752, text=14237696, lib=0, data=919998464, dirty=0)
>>> p.io_counters() #进程的IO信息,包括读写IO数字及参数
pio(read_count=367633, write_count=92582, read_bytes=326133248, write_bytes=1401589760)
>>> p.connections() #返回进程列表
[pconn(fd=87, family=2, type=1, laddr=('192.168.1.141', 59887), raddr=('192.168.1.142', 6803), status='ESTABLISHED'), pconn(fd=5, family=2, type=1, laddr=('0.0.0.0', 6809), raddr=(), status='LISTEN'), pconn(fd=46, family=2, type=1, laddr=('192.168.1.141', 6812), raddr=('192.168.1.143', 57543), status='ESTABLISHED')]
>>> p.num_threads() #进程开启的线程数
156
版权声明:本文为博主原创文章,未经博主允许不得转载。
Python psutil