psutil详解
一、介绍
用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如ps
,top
,free
等等。要获取这些系统信息,Python可以通过subprocess
模块调用并获取结果。但这样做显得很麻烦,尤其是要写很多解析代码。
在Python中获取系统信息的另一个好办法是使用psutil
这个第三方模块。顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。
二.安装psutil模块
[root@master yum.repos.d]# yum install gcc python3-devel -y
[root@master yum.repos.d]# pip3 install psutil
三、模块的使用
3.1 获取cpu信息
>>> import psutil
>>> psutil.cpu_
psutil.cpu_count( psutil.cpu_percent( psutil.cpu_times(
psutil.cpu_freq( psutil.cpu_stats( psutil.cpu_times_percent(
#默认返回逻辑CPU的个数,当设置logical的参数为False时,返回物理CPU的个数。
>>> psutil.cpu_count()
2
#cpu的物理核心
>>> psutil.cpu_count(logical=False)
2
#返回CPU的利用率,percpu为True时显示所有物理核心的利用率,interval不为0时,则阻塞时显示interval执行的时间内的平均利用率
>>> psutil.cpu_percent()
0.1
#cpu用户/系统/空闲时间
>>> psutil.cpu_times()
scputimes(user=2701.86, nice=2.3, system=1819.85, idle=1728893.15, iowait=172.23, irq=0.0, softirq=416.82, steal=0.0, guest=0.0, guest_nice=0.0)
#cpu频率
>>> psutil.cpu_freq()
scpufreq(current=1800.004, min=0.0, max=0.0)
#以命名元组的形式返回CPU的统计信息,包括上下文切换,中断,软中断和系统调用次数。
>>> psutil.cpu_stats()
scpustats(ctx_switches=107918325, interrupts=61923152, soft_interrupts=72724668, syscalls=0)
#cpu使用时间百分比
>>> psutil.cpu_times_percent()
scputimes(user=0.0, nice=0.0, system=0.1, idle=99.9, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
#实现类似top命令的CPU使用率,每秒刷新一次,累计10次
>>> for x in range(10):
... print(psutil.cpu_percent(interval=1,percpu=True)) #返回CPU的利用率,percpu为True时显示所有物理核心的利用率,interval不为0时,则阻塞时显示interval执行的时间内的平均利用率
...
[0.0, 0.0]
[1.0, 0.0]
[0.0, 0.0]
[0.0, 0.0]
[0.0, 0.0]
[0.0, 0.0]
[0.0, 0.0]
[0.0, 1.0]
[0.0, 0.0]
[0.0, 0.0]
3.2 获取内存信息
>>> psutil.virtual_memory()
svmem(total=1907744768, available=1375522816, percent=27.9, used=346296320, free=225312768, active=592613376, inactive=835293184, buffers=0, cached=1336135680, shared=4149248, slab=134766592)
>>> psutil.virtual_memory().percent
27.9
>>> psutil.swap_memory()
sswap(total=2147479552, used=147595264, free=1999884288, percent=6.9, sin=7364608, sout=152559616)
返回的是字节为单位的整数,可以看到,总内存大小是1907744768=1.7G,已用346296320=0.3G,使用了27.9%。
而交换区大小是2147479552=2G。
3.3 获取磁盘信息
可以通过psutil获取磁盘分区、磁盘使用率和磁盘IO信息
>>> psutil.disk_
psutil.disk_io_counters( psutil.disk_partitions( psutil.disk_usage(
#disk_io_counters([perdisk]):以命名元组的形式返回磁盘io统计信息(汇总的),包括读、写的次数,读、写的字节数等。
#当perdisk的值为True