系统性能信息模块之psutil模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统性能信息模块之psutil模块相关的知识,希望对你有一定的参考价值。

一、psutil模块介绍

官方网址:https://pypi.org/

psutil模块安装:https://github.com/giampaolo/psutil/blob/master/INSTALL.rst

官方介绍:https://pypi.org/project/psutil/#downloads 

概要

plutil(进程和系统实用程序)是一个跨平台的库,用于在Python中检索有关运行进程和系统资源利用率(CPU,内存,磁盘,网络)的信息。它主要用于系统监视,分析和限制系统资源及运行进程的管理。它实现了Linux命令工具提供的许多功能,例如:ps,top,lsof,netstat,ifconfig,who,df,kill,nice,ionice,iostat,iotop,uptime,pidos,tty,tasket,pmap等。psutil目前支持以下平台:linux、Windows、OSX、FreeBSD,OpenBSD、NETBSD、sun Solaris、AIX操作系统。

二、获取系统性能信息

获取CPU信息

Linux操作系统的CPU利用率有以下几个部分:

  • User Time,执行用户进程的时间百分比
  • System Time,执行内核进程和中断的时间百分比
  • Wait IO,由于IO等待而使CPU处于idle(空闲)状态的时间百分比;
  • Idle,CPU处于idle状态的时间百分比。

使用Python的psutil.cpu_times()方法可以非常简单地得到这些信息,同时也可以获取CPU的硬件相关信息,比如CPU的物理个数与逻辑个数,示例如下:

>>> import psutil
>>> psutil.cpu_times()
scputimes(user=5046.13, nice=0.0, system=7241.73, idle=106233.48)
>>> psutil.cpu_times(percpu=True)    #显示所有逻辑CPU信息,指定方法变量percpu=True
[scputimes(user=1915.16, nice=0.0, system=3071.14, idle=24700.29), scputimes(user=612.52, nice=0.0, system=552.06, idle=28520.87), scputimes(user=1907.31, nice=0.0, system=3077.95, idle=24700.2), scputimes(user=628.63, nice=0.0, system=545.3, idle=28511.51)]

>>> psutil.cpu_times().user      #获取单项数据信息,如用户user的CPU时间比
5116.06
>>> psutil.cpu_count()              #获取CPU的逻辑个数,默认logical=True
4
>>> psutil.cpu_count(logical=False)           #获取CPU的物理个数
2
>>> psutil.cpu_stats()
scpustats(ctx_switches=128761, interrupts=473080, soft_interrupts=19603638, syscalls=595993)
>>> psutil.cpu_freq()
scpufreq(current=3100, min=3100, max=3100)

获取内存信息

Linux系统的内存利用率涉及total(内存总数)、used(以使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用

psutil.virtual_memory()与psutil.swap_memory()方法获取这些信息,示例如下:

>>> import psutil
>>> psutil.virtual_memory()           #使用psutil.virtaul_memory方法获取内存完整信息
svmem(total=8589934592, available=2785501184, percent=67.6, used=7854592000, free=346370048, active=3651194880, inactive=2439131136, wired=1764265984)
>>> psutil.swap_memory()             #获取SWAP分区信息
sswap(total=0, used=0, free=0, percent=0, sin=11696345088, sout=231964672)
>>> psutil.virtual_memory().total         #获取内存总数
8589934592
>>> psutil.virtual_memory().free          #获取空闲内存数
318025728

获取磁盘信息

磁盘IO信息包括read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节书)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)等,

使用psutil.disk_io_counters()获取

>>> import psutil
>>> psutil.disk_partitions()        #psutil.disk_partitions方法获取磁盘完整信息
[sdiskpart(device=/dev/disk1, mountpoint=/, fstype=hfs, opts=rw,local,rootfs,dovolfs,journaled,multilabel)]
>>> psutil.disk_usage(/)          #psutil.disk_usage方法获取分区(参数)
sdiskusage(total=249664372736, used=90747437056, free=158654791680, percent=36.4)
>>> psutil.disk_io_counters()       #psutil.disk_io_counters获取磁盘总的IO个数、读写信息
sdiskio(read_count=375539, write_count=149398, read_bytes=9541869056, write_bytes=5333078016, read_time=135111, write_time=94994)
>>> psutil.disk_io_counters(perdisk=True)     #perdisk=True 参数获取单个分区IO个数、读写信息
{disk0: sdiskio(read_count=375543, write_count=149432, read_bytes=9541934592, write_bytes=5333483008, read_time=135115, write_time=95009)}

获取网络信息

系统的网络信息与磁盘IO类似,涉及几个关键点,包括bytes_set(发送字节数)、bytes_recv(接收字节数)、packets_set(发送数据包数)、packets_recv(接收数据包数)

>>> psutil.net_io_counters()     #psutil.net_io_counters获取网络总的IO信息,默认pernice=False
snetio(bytes_sent=53240820, bytes_recv=2436823493, packets_sent=510560, packets_recv=2321776, errin=0, errout=49, dropin=0, dropout=0)
>>> psutil.net_io_counters(pernic=True)     #pernice=True 参数 输出每个网络接口的IO信息
{lo0: snetio(bytes_sent=170312, bytes_recv=170312, packets_sent=1271, packets_recv=1271, errin=0, errout=0, dropin=0, dropout=0), gif0: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), stf0: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), en0: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), en2: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), en4: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), en1: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), en3: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), bridge0: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), p2p0: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), awdl0: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), en6: snetio(bytes_sent=434385, bytes_recv=810643, packets_sent=2798, packets_recv=2942, errin=0, errout=0, dropin=0, dropout=0), utun0: snetio(bytes_sent=268, bytes_recv=0, packets_sent=3, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), en10: snetio(bytes_sent=52635963, bytes_recv=2435926406, packets_sent=506490, packets_recv=2317673, errin=0, errout=49, dropin=0, dropout=0), vmnet1: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), vmnet8: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0)}


>>> psutil.net_if_addrs()
{lo0: [snic(family=<AddressFamily.AF_INET: 2>, address=127.0.0.1, netmask=255.0.0.0, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET6: 30>, address=::1, netmask=ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET6: 30>, address=fe80::1%lo0, netmask=ffff:ffff:ffff:ffff::, broadcast=None, ptp=None)], en10: [snic(family=<AddressFamily.AF_INET: 2>, address=192.168.12.119, netmask=255.255.255.0, broadcast=192.168.12.255, ptp=None), snic(family=<AddressFamily.AF_LINK: 18>, address=d4:3a:65:07:2a:e2, netmask=None, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET6: 30>, address=fe80::18a7:9f11:40a7:c7f4%en10, netmask=ffff:ffff:ffff:ffff::, broadcast=None, ptp=None)], vmnet1: [snic(family=<AddressFamily.AF_INET: 2>, address=192.168.75.1, netmask=255.255.255.0, broadcast=192.168.75.255, ptp=None), snic(family=<AddressFamily.AF_LINK: 18>, address=00:50:56:c0:00:01, netmask=None, broadcast=None, ptp=None)], vmnet8: [snic(family=<AddressFamily.AF_INET: 2>, address=192.168.121.1, netmask=255.255.255.0, broadcast=192.168.121.255, ptp=None), snic(family=<AddressFamily.AF_LINK: 18>, address=00:50:56:c0:00:08, netmask=None, broadcast=None, ptp=None)], en0: [snic(family=<AddressFamily.AF_LINK: 18>, address=8c:85:90:3c:fa:20, netmask=None, broadcast=None, ptp=None)], en2: [snic(family=<AddressFamily.AF_LINK: 18>, address=5a:00:24:a0:8d:04, netmask=None, broadcast=None, ptp=None)], en4: [snic(family=<AddressFamily.AF_LINK: 18>, address=5a:00:24:a0:8d:05, netmask=None, broadcast=None, ptp=None)], en1: [snic(family=<AddressFamily.AF_LINK: 18>, address=5a:00:24:a0:8d:00, netmask=None, broadcast=None, ptp=None)], en3: [snic(family=<AddressFamily.AF_LINK: 18>, address=5a:00:24:a0:8d:01, netmask=None, broadcast=None, ptp=None)], bridge0: [snic(family=<AddressFamily.AF_LINK: 18>, address=5a:00:24:a0:8d:00, netmask=None, broadcast=None, ptp=None)], p2p0: [snic(family=<AddressFamily.AF_LINK: 18>, address=0e:85:90:3c:fa:20, netmask=None, broadcast=None, ptp=None)], awdl0: [snic(family=<AddressFamily.AF_LINK: 18>, address=62:46:b9:22:e2:44, netmask=None, broadcast=None, ptp=None)], en6: [snic(family=<AddressFamily.AF_LINK: 18>, address=ac:de:48:00:11:22, netmask=None, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET6: 30>, address=fe80::aede:48ff:fe00:1122%en6, netmask=ffff:ffff:ffff:ffff::, broadcast=None, ptp=None)], utun0: [snic(family=<AddressFamily.AF_INET6: 30>, address=fe80::37a7:ebf5:f72a:6017%utun0, netmask=ffff:ffff:ffff:ffff::, broadcast=None, ptp=None)]}
>>> 
>>> psutil.net_if_stats()
{lo0: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=16384), gif0: snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=1280), stf0: snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=1280), en0: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=1500), en2: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500), en4: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500), en1: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500), en3: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500), bridge0: snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=1500), p2p0: snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=2304), awdl0: snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=1484), en6: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=1500), utun0: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=2000), en10: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500), vmnet1: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=1500), vmnet8: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=1500)}

other system info

 

以上是关于系统性能信息模块之psutil模块的主要内容,如果未能解决你的问题,请参考以下文章

python之psutil模块

Python模块之psutil详解

Python学习笔记-系统性能信息模块psutil

Python系统性能信息模块psutil

psutil模块

系统性能信息模块 psutil