psutil (python system and process utilities) 是一个跨平台的第三方库,能够轻松实现获取系统运行的进程和系统利用率(包扩CPU、内存、磁盘、网络等)信息。它主要用于系统监控、分析、限制系统资源和进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持的操作系统包括:Linux,Windows,macOS,,AIX等等。同时支持python2与python3版本,当前最新版本为5.4.8。

1. psutil的安装

1
pip install psutil

2. psutil获取系统性能信息之CPU

2.1. cpu_times CPU运行时间

psutil.cpu_times(percpu = False )将每个特定状态下CPU运行的时间以元组的形式返回。

CPU运行状态 解释
user 进程执行用户态代码耗费的CPU时间。
nice 在优先级高的用户级别执行时CPU占用率的百分比。
system 内核执行系统调用所使用的CPU时间。
idle CPU空闲并且系统没有未完成的磁盘I / O请求的时间百分比。
iowait CPU等待I/O输入输出的时间
irq CPU用于维护硬件中断所花费的时间百分比。
softirq CPU用于服务软件中断所花费的时间百分比。
steal 在虚拟化环境中运行的其他操作系统所花费的时间
guest CPU用于运行虚拟处理器的时间百分比。
dpc 服务延迟过程调用所花费的时间
interrupt 服务硬件中断所花费的时间
1234567891011121314151617181920
## ubuntu系统### 获取CPU运行的时间信息

>>> import psutil>>> psutil.cpu_times()scputimes(user=42.85, nice=4.64, system=40.27, idle=4864.93, iowait=5.94, irq=0.0, softirq=2.16, steal=0.0, guest=0.0, guest_nice=0.0)

### 获取每个逻辑CPU的信息

>>> psutil.cpu_times(percpu=True)    [scputimes(user=13.2, nice=1.74, system=13.84, idle=2712.55, iowait=1.62, irq=0.0, softirq=0.57, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=10.48, nice=0.87, system=10.49, idle=2719.36, iowait=1.45, irq=0.0, softirq=0.21, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=12.4, nice=1.36, system=10.22, idle=2721.21, iowait=1.37, irq=0.0, softirq=0.7, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=11.28, nice=0.65, system=9.2, idle=2723.23, iowait=1.5, irq=0.0, softirq=0.83, steal=0.0, guest=0.0, guest_nice=0.0)]

## windows操作系统

>>> psutil.cpu_times()scputimes(user=10006.453125, system=5947.421875, idle=155528.3125, interrupt=209.296875, dpc=187.203125)

2.2. cpu_percent cpu利用率

psutil.cpu_percent(interval = None,percpu = False )返回一个浮点数,表示当前系统范围的CPU利用率百分比。如果interval=0.1,表示0.1sCPU的平均使用率。如果interval=0或者None时,比较自上次调用或模块导入后经过的系统CPU时间,立即返回。所有第一次的返回的数据是个无意义的数据。当percpu是True返回表示利用率的浮点数列表,以每个逻辑CPU的百分比表示。

1234567891011
#与上次调用经过时间内的cpu的使用率>>> psutil.cpu_percent()1.3

#当前1s内cpu的使用率>>> psutil.cpu_percent(interval=1)0.3

## 4个逻辑cpu的使用率>>> psutil.cpu_percent(interval=1,percpu=True)[1.0, 1.0, 0.0, 0.0]

2.3. cpu_times_percent 特定CPU状态的利用率

psutil.cpu_times(percpu=True)提供每个特定CPU时间的利用率百分比 。 interval和 percpu参数的含义与icpu_percent()中的含义相同。

12
>>> psutil.cpu_times_percent(interval=1 )scputimes(user=0.0, nice=0.0, system=0.5, idle=99.5, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)

2.4. cpu_count CPU的数量

psutil.cpu_count()返回系统中逻辑CPU的物理个数或者逻辑个数。

12345678910
##windows操作系统 VM虚拟机双核为2个单核处理器### 逻辑cpu个数>>> psutil.cpu_count()8### 物理cpu个数>>> psutil.cpu_count(logical=False)4### 当前可用cpu个数>>> len(psutil.Process().cpu_affinity())8

2.5. cpu_stats CPU 统计信息

cpu_stats() 将各种CPU统计信息作以元组形式返回。

CPU信息 解释
ctx_switches 启动后的上下文切换次数
interrupts 自引导以来的中断数
soft_interrupts 自引导以来的软件中断次数
syscalls 自引导以来的系统调用次数
12345678
## ubuntu系统

>>> psutil.cpu_stats()scpustats(ctx_switches=4589481, interrupts=2532478, soft_interrupts=719197, syscalls=0)

## windows系统>>> psutil.cpu_stats()scpustats(ctx_switches=344724592, interrupts=270222602, soft_interrupts=0, syscalls=1234130591)

2.6. cpu_freq CPU频率

psutil.cpu_freq(percpu = False )将CPU频率作为名称包返回,包括 以Mhz表示的当前,最小和最大频率。如果percpu是True并且系统支持每CPU频率检索,则为每个CPU返回一个频率列表,否则返回包含单个元素的列表(仅支持linux系统)。如果无法确定最小值和最大值,则将它们设置为0。在Linux 当前频率上报告实时值,在所有其他平台上它代表最大值。

1234567891011
## windows系统

>>> psutil.cpu_freq()scpufreq(current=2594.0, min=0.0, max=2594.0)>>> psutil.cpu_freq(percpu=False)scpufreq(current=2594.0, min=0.0, max=2594.0)

wmic:root\cli>cpu list brief DeviceID  Manufacturer  MaxClockSpeed CPU0      GenuineIntel     2594

3 psutil获取系统性能信息之内存

3.1. virtual_memory() 物理内存使用情况

内存信息 解释
total 总物理内存
available 在没有系统进入SWAP下立即提供的内存。
percent 使用内存占比
used 使用的物理内存
free 没有使用的物理内存
active 当前正在使用或最近使用的物理内存
inactive 标记未使用的内存
buffers buffers使用的缓存
cached ccached使用的缓存
shared 显示被共享使用的物理内存大小
slab 内核数据结构缓存
123456789
#windows

>>> psutil.virtual_memory()svmem(total=8473522176, available=1940721664, percent=77.1, used=6532800512, free=1940721664)

#Linux

>>> psutil.virtual_memory()svmem(total=2070257664, available=777777152, percent=62.4, used=1090142208, free=80498688, active=1195728896, inactive=459780096, buffers=164036608, cached=735580160, shared=10145792, slab=221949952)

3.2. swap_memory() 交换内存使用情况

1234567891011
#Windows上的sin和sout总是设置为0

>>> psutil.swap_memory()sswap(total=10151243776, used=7573495808, free=2577747968, percent=74.6, sin=0, sout=0)

#Linux# sin:系统从磁盘累计换入的字节数#sout:系统从磁盘累计换出的字节数

>>> psutil.swap_memory()sswap(total=2144333824, used=7090176, free=2137243648, percent=0.3, sin=0, sout=6705152)

4 psutil获取系统性能信息之此磁盘

4.1. disk_partitions 获取所有磁盘信息

123456789101112
#windows

>>> from psutil import *>>> disk_partitions()[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed'),        #固态硬盘 sdiskpart(device='D:\\', mountpoint='D:\\', fstype='FAT32', opts='rw,removable'),    #U盘 sdiskpart(device='E:\\', mountpoint='E:\\', fstype='', opts='cdrom')]            #光盘 

#Linux 

>>> psutil.disk_partitions()[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,relatime,errors=remount-ro')]

4.2. disk_usage 获取单个磁盘信息

123456789101112
# windows

>>> disk_usage('C:\\')sdiskusage(total=126491697152, used=86524149760, free=39967547392, percent=68.4)>>> disk_usage('D:\\')sdiskusage(total=134184173568, used=1953497088, free=132230676480, percent=1.5)>>> disk_usage('E:\\')PermissionError: [WinError 21] 设备未就绪。

# linux>>> psutil.disk_usage("/dev/sda1")sdiskusage(total=1016070144, used=0, free=1016070144, percent=0.0)

4.3. psutil.disk_io_counters 获取IO信息

1234567891011121314151617181920
#如果perdisk为True系统上安装的每个物理磁盘返回信息

# widows

>>> disk_io_counters()sdiskio(read_count=870403, write_count=665904, read_bytes=36953495552, write_bytes=20282217984, read_time=1565, write_time=871)

#linux

>>> psutil.disk_io_counters()sdiskio(read_count=53366,       #读取次数        write_count=9803,       #写入次数        read_bytes=709110784,   #读取字节数        write_bytes=417996800,  #写入字节数        read_time=29572,        #读取时间        write_time=4656,        #写入时间        read_merged_count=1034,  #合并读取的次数        write_merged_count=10158,#合并写入的次数        busy_time=17792          #实际做I/0操作的时间       )

5 psutil获取系统性能信息之网络

5.1. psutil.net_connections 获取网络套接字

12345678910111213
#windows>>> net_connections()[sconn(fd=-1, family=<AddressFamily.AF_INET6: 23>, type=1, laddr=addr(ip='::', port=1536), raddr=(), status='LISTEN', pid=724), sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=2, laddr=addr(ip='::1', port=5353), raddr=(), status='NONE', pid=4208), sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=2, laddr=addr(ip='0.0.0.0', port=58044), raddr=(), status='NONE', pid=14420), sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=1, laddr=addr(ip='127.0.0.1', port=36600), raddr=(), status='LISTEN', pid=6116), sconn(fd=-1, family=<AddressFamily.AF_INET6: 23>, type=1, laddr=addr(ip='::1', port=26672), raddr=addr(ip='::1', port=35432))]

#Linux

>>> psutil.net_connections()[sconn(fd=6, family=2, type=2, laddr=addr(ip='0.0.0.0', port=68), raddr=(), status='NONE', pid=652)]

5.2. psutil.net_if_addrs 获取网卡的信息

1234567891011
# windows

>>> net_if_addrs(){'VMware Network Adapter VMnet1': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='00-50-56-C0-00-01', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.153.1', netmask='255.255.255.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::4192:c5d1:8fff:98c6', netmask=None, broadcast=None, ptp=None)], 'VMware Network Adapter VMnet8': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='00-50-56-C0-00-08', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.78.1', netmask='255.255.255.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::40d2:696a:cacb:8388', netmask=None, broadcast=None, ptp=None)], 'Loopback Pseudo-Interface 1': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='::1', netmask=None, broadcast=None, ptp=None)]}

#linux>>> psutil.net_if_addrs(){'lo': [snicaddr(family=2, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snicaddr(family=10, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snicaddr(family=17, address='00:00:00:00:00:00', netmask=None, broadcast=None, ptp=None)],  'eth0': [snicaddr(family=2, address='192.168.78.139', netmask='255.255.255.0', broadcast='192.168.78.255', ptp=None), snicaddr(family=10, address='fe80::20c:29ff:fef4:4e44%eth0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), snicaddr(family=17, address='00:0c:29:f4:4e:44', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}

5.3. psutil.net_if_stats 获取网络接口的状态

12345678910111213141516
# windows

>>> net_if_stats(){'以太网': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=1000, mtu=1500),'VMware Network Adapter VMnet1': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500),'VMware Network Adapter VMnet8': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500),'Loopback Pseudo-Interface 1': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=1073, mtu=1500),'WLAN': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500),'本地连接* 2': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500),'本地连接* 1': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500)}>>>

# Linux

>>> psutil.net_if_stats(){'lo': snicstats(isup=True, duplex=0, speed=0, mtu=65536), 'eth0': snicstats(isup=True, duplex=2, speed=1000, mtu=1500)}

5.4. psutil.net_io_counters 获取网口的流量

1234567891011121314151617
# psutil.net_io_counters(pernic = False) 如果pernic为True系统上安装的每个网络接口返回信息。# windows

>>> net_io_counters()snetio(bytes_sent=176300623, #发送字节       bytes_recv=402338143, #接受字节       packets_sent=2509858, #发送包数       packets_recv=713322,  #接受包数       errin=0,              #接受错误数       errout=0,             #发送错误数       dropin=0,             #丢弃传入数据包数量       dropout=0)            #丢弃传出数据包数量

# Linux>>> psutil.net_io_counters()snetio(bytes_sent=83801, bytes_recv=31649461, packets_sent=1277, packets_recv=21180, errin=0, errout=0, dropin=0, dropout=0)

6 psutil获取系统性能信息之其他

6.1. 获取开机时间

123
>>>import datetime,psutil>>>datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")'2018-11-09 15:01:10'

6.2. 获取当前用户

12
>>> psutil.users()[suser(name='root', terminal=None, host='0.4.0.0', started=1541862557.0, pid=None)]

6.3. 获取PID

12
>>> psutil.pids()[0, 4, 120, 404, 592, 724, 796, 816, 936, 964, 972, 344, 496, 1180, 1336, 1508, 1540, 1568, 1592, 1644, 1696, 1720]

6.4. 获取进程信息

123456
>>> for x in  psutil.process_iter():...     print(x)...psutil.Process(pid=592, name='csrss.exe', started='2018-11-09 15:01:18')psutil.Process(pid=724, name='wininit.exe', started='2018-11-09 15:01:24')psutil.Process(pid=736, name='svchost.exe', started='2018-11-10 17:20:13')

Python之psutil库的使用相关推荐

  1. python之psutil库的简单使用:监控Linux系统性能

    python的psutil库可以实现监控功能 psutil能够轻松的实现获取系统运行的进程和系统利用率(CPU.内存.磁盘.网络等)信息,主要应用于系统监控. 使用psutil实现以下要求 1.显示当 ...

  2. python安装psutil库及使用

    psutil库介绍 psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要 ...

  3. python中psutil库用法详解

    psutil库主要用于系统监控.分析和限制流程资源以及管理正在运行的流程. 官方文档:psutil documentation - psutil 5.9.2 documentation 安装: pip ...

  4. python psutil库安装_安装psutil模块报错安装python-devel

    psutil/_psutil_linux.c:9:20: 错误:Python.h:没有那个文件或目录 In file included from psutil/_psutil_linux.c:19: ...

  5. Python三方库之:psutil库学习

    Python三方库之:psutil库学习 1.描述 psutil(python system and process utilities)可以直接获取计算机CPU,内存,磁盘,网络等资源使用情况,可以 ...

  6. Python 第三方扩展库

    我们知道,Python 一大优势之一便是它的可扩展性,在此基础上衍生出了数量庞大的第三方扩展库, 在这里汇总一下自己接触过的库,方便下次查阅. 1. eventlet 地址:http://eventl ...

  7. Python自动化测试常用库整理

    参考:https://www.jianshu.com/p/b45d240eabac 今天花了一些时间,过了一下这几年自己用Python开发的自动化测试框架,然后将其中常用到Python库抽出来,简单整 ...

  8. 终于把python的所有库整理完毕了,现在一篇python库的字典诞生了

    库名称简介 添加小编学习群 832339352 即可自动获取大量python视频教程以及各类PDF! Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文 ...

  9. python的第三方库汇总

    Python 资源大全中文版 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以 ...

最新文章

  1. 软件架构:5种你应该知道的模式
  2. java 9宫格抽奖_前端js实现九宫格模式抽奖(多宫格抽奖)
  3. java书籍_学习Java最好的10本书,从入门到精通
  4. matlab数组元素对应相减,MATLAB下矩阵的运算 看完你就知道了
  5. conda command not found ubuntu
  6. CG CTF MISC MD5
  7. c语言个人账册报告的课题来源,C语言个人账簿管理系统报告
  8. 联想台式机网卡驱动_【装机帮扶站】第339期:联想刃7000:是否还有选购价值?4000价位装机推荐...
  9. python怎么画出圆润的曲线_利用python画出AUC曲线的实例
  10. Hibernate和UUID标识符
  11. html5文章页面,文章页面的设计《 HTML5 与 Bootstrap 应用实例 》
  12. 春暖花开php,春暖花开的朋友圈说说 开心的说说短句
  13. 仿写淘宝页面css+html+js
  14. Quartus II 12.1安装及破解
  15. delphi 安装控件时提示系统找不到指定的模块的解决
  16. Windows2008虚拟机扩容C盘
  17. phpstrom中的常用快捷键
  18. 家用计算机初步,职称计算机Internet基础知识:配置家庭局域网
  19. Unity3D坦克大战
  20. Java Shiro 设置 anon 无效

热门文章

  1. 20210828每周分享(第二期)-中英文对照翻译插件、笔记软件
  2. numpy.ones和numpy.zeros函数
  3. 在阿里待了十年的老P7,资产过千万,过得不如月薪过万的我们
  4. matlab打开界面模糊,模糊PID(fuzzy PID)仿真举例
  5. citidirect什么意思_‎App Store 上的“CitiDirect BE®”
  6. Java - Math.round(1.5) 等于多少?Math.round(-1.5) 等于多少?
  7. mybatis:selectKey的使用
  8. 手冲1分钟正常吗_腰疼真的只是腰的问题吗?教你1分钟快速检测和处理方法
  9. 基于单变量和多变量计算水文频率-基础知识程序实现
  10. SQL常用函数、索引、视图、序列