系统性能信息模块psutil
psutil是一个跨平台库,实现了linux下如ps,top,lsof,netstat,ifconfig,df,free等命令,功能十分强大。
获取CPU信息
linux的CPU信息包括以下几个部分:
- us:User Time,执行用户进程的时间百分比
- sy:System Time,执行内核进程和中断的时间百分比
- ni:niced,运行已调整优先级的用户进程的CPU时间百分比
- id:Idle,CPU处于idle状态的时间百分比
- wa:Wait IO,由于IO等待而使CPU处于idle状态的时间百分比
- hi:hardware irq,处理硬件中断的CPU时间百分比
- si:software irq,处理软件中断的CPU时间百分比
使用psutil.cpu_times()方法可以非常容易地获得这些信息,同时也可以获得CPU的硬件相关信息。
>>> import psutil
>>> psutil.cpu_times()
scputimes(user=10795510.2, nice=2541.04, system=1734822.41, idle=37173589.62, iowait=32407.26, irq=0.0, softirq=6520.69, steal=0.0, guest=0.0, guest_nice=0.0)
>>>
>>> psutil.cpu_count()#获取CPU逻辑个数
4
>>> psutil.cpu_count(logical=False)#获取CPU物理个数
4
>>>
获取内存信息
linux系统内存信息包括以下几个部分:
- total:内存总数
- used:已使用的内存数
- free:空闲内存数
- buffers:缓冲使用数
- cache:缓存使用数
- swap:交换分区使用数
使用psutil.virtual_memory()以及psutil.swap_memory()方法可以获取到内存信息,psutil模块的内存单位是字节。
>>> psutil.virtual_memory() #获取内存使用信息
svmem(total=8329592832, available=7343640576, percent=11.8, used=578506752, free=1014968320, active=2367078400, inactive=4003315712, buffers=926486528, cached=5809631232, shared=90120192, slab=831270912)
>>>
>>> psutil.virtual_memory().total #获取总内存数
8329592832
>>>
>>> psutil.swap_memory() #获取swap使用信息
sswap(total=8553230336, used=1585152, free=8551645184, percent=0.0, sin=57344, sout=5869568)
>>>
获取磁盘信息
linux系统中的磁盘信息主要包括磁盘利用率和IO信息
- read_count:读IO数
- write_count:写IO数
- read_bytes:IO读字节数
- write_bytes:IO写字节数
- read_time:磁盘读时间
- write_time:磁盘写时间
使用psutil.disk_usage()以及psutil.disk_io_counters()方法可以获取到磁盘利用率以及IO信息
>>> psutil.disk_partitions() #获取完整的磁盘信息
[sdiskpart(device='/dev/mapper/ddf1_4c5349202020202080861d60000000004711471100001450p1', mountpoint='/', fstype='ext4', opts='rw,relatime,errors=remount-ro,data=ordered'), sdiskpart(device='/dev/mapper/ddf1_4c5349202020202080861d60000000004711471100001450p1', mountpoint='/var/lib/docker/aufs', fstype='ext4', opts='rw,relatime,errors=remount-ro,data=ordered')]
>>>
>>> psutil.disk_usage('/') #获取根分区的使用情况
sdiskusage(total=482612699136, used=33947377664, free=424126337024, percent=7.4)
>>>
>>> psutil.disk_io_counters() #获取硬盘总的IO个数以及读写信息
sdiskio(read_count=575059, write_count=46108186, read_bytes=27368806400, write_bytes=580886237184, read_time=2335136, write_time=2915821808, read_merged_count=6899, write_merged_count=3261814, busy_time=269195312)
>>>
>>> psutil.disk_io_counters(perdisk=True) #获取单个分区的IO个数以及读写信息
获取网络信息
linux的网络信息主要包括:
- bytes_sent:发送字节数
- bytes_recv:接收字节数
- packets_sent:发送数据包数
- packets_recv:接收数据包数
可以使用psutil.net_io_counters()方法获取
>>> psutil.net_io_counters() #获取网络总的IO信息
snetio(bytes_sent=13203708046, bytes_recv=302698681520, packets_sent=27480093, packets_recv=1890772784, errin=0, errout=0, dropin=18288194, dropout=0)
>>>
>>> psutil.net_io_counters(pernic=True) #获取每个网络接口的IO信息
获取进程信息
psutil模块在获取进程信息方面也提供了很好的支持,可以使用psutil.pids()方法获取所有进程的pid,使用psutil.Process()方法获取单个进程的名称、路径、状态、系统资源利用率等信息;同时还提供了Popen类来获取用户启动的应用程序进程信息,方便用户跟踪进程的运行状态。