简介

psutil是一个开源切跨平台的库,其提供了便利的函数用来获取操作系统的信息,比如CPU,内存,磁盘,网络等。此外,psutil还可以用来进行进程管理,包括判断进程是否存在、获取进程列表、获取进程详细信息等。而且psutil还提供了许多命令行工具提供的功能,包括:ps,top,lsof,netstat,ifconfig, who,df,kill,free,nice,ionice,iostat,iotop,uptime,pidof,tty,taskset,pmap。

psutil包含了异常、类、功能函数和常量,其中功能函数用来获取系统的信息,如CPU、磁盘、内存、网络等。类用来实现进程的管理功能

功能函数

根据函数的功能,主要分为CPU、磁盘、内存、网络几类,下面将会总几个方面来介绍psutil提供的功能函数。

CPU相关

函数

描述

psutil.cpu_count()

cpu_count(,[logical]):默认返回逻辑CPU的个数,当设置logical的参数为False时,返回物理CPU的个数。

psutil.cpu_percent()

cpu_percent(,[percpu],[interval]):返回CPU的利用率,percpu为True时显示所有物理核心的利用率,interval不为0时,则阻塞时显示interval执行的时间内的平均利用率

psutil.cpu_times()

cpu_times(,[percpu]):以命名元组(namedtuple)的形式返回cpu的时间花费,percpu=True表示获取每个CPU的时间花费

psutil.cpu_times_percent()

cpu_times_percent(,[percpu]):功能和cpu_times大致相同,看字面意思就能知道,该函数返回的是耗时比例。

psutil.cpu_stats()

cpu_stats()以命名元组的形式返回CPU的统计信息,包括上下文切换,中断,软中断和系统调用次数。

psutil.cpu_freq()

cpu_freq([percpu]):返回cpu频率

示例:

# 查看cpu个数

>>> import psutil

>>> psutil.cpu_count()

2

>>> psutil.cpu_count(logical=False)

1

>>>

# 查看cpu利用率

>>> psutil.cpu_percent()

0.2

>>> psutil.cpu_percent(percpu=True)

[0.1, 0.2]

>>>

# 查看cpu时间花费

>>> psutil.cpu_times()

scputimes(user=29.09, nice=0.0, system=22.62, idle=24434.77, iowait=1.74, irq=0.0, softirq=0.28, steal=0.27, guest=0.0, guest_nice=0.0)

>>> psutil.cpu_times(percpu=True)

[scputimes(user=13.64, nice=0.0, system=12.02, idle=12235.5, iowait=1.0, irq=0.0, softirq=0.16, steal=0.09, guest=0.0, guest_nice=0.0),

scputimes(user=15.47, nice=0.0, system=10.62, idle=12229.44, iowait=0.74, irq=0.0, softirq=0.12, steal=0.17, guest=0.0, guest_nice=0.0)]

>>> print(cpu_time)

scputimes(user=29.24, nice=0.0, system=22.76, idle=24618.94, iowait=1.74, irq=0.0, softirq=0.28, steal=0.27, guest=0.0, guest_nice=0.0)

>>> cpu_time.user

29.24

Memory内存相关

virtual_memory():以命名元组的形式返回内存使用情况,包括总内存,可用内存,内存利用率,buffer和cache等。单位为字节。

>>> import psutil

>>> psutil.virtual_memory()

svmem(total=8071716864, available=6532554752, percent=19.1, used=1258717184, free=6526308352, active=1153519616, inactive=194592768, buffers=2129920, cached=284561408, shared=9011200, slab=39006208)

swap_memory():以命名元组的形式返回swap/memory使用情况,包含swap中页的换入和换出。

>>> import psutil

>>> psutil.swap_memory()

sswap(total=17179865088, used=0, free=17179865088, percent=0.0, sin=0, sout=0)

>>>

单位转换

import psutil

def bytes2human(n):

symbols = ('K','M','G','T','P','E','Z','Y')

prefix = {}

for i,s in enumerate(symbols):

prefix[s] = 1 << (i + 1) * 10

for s in reversed(symbols):

if n >= prefix[s]:

value = float(n) / prefix[s]

return '%.1f%s' % (value,s)

return '%sB' % n

print(bytes2human(psutil.virtual_memory().total))

Disk相关:

函数

描述

psutil.disk_io_counters()

disk_io_counters([perdisk]):以命名元组的形式返回磁盘io统计信息(汇总的),包括读、写的次数,读、写的字节数等。当perdisk的值为True,则分别列出单个磁盘的统计信息(字典:key为磁盘名称,value为统计的namedtuple)。

psutil.disk_partitions()

disk_partitions([all=False]):以命名元组的形式返回所有已挂载的磁盘,包含磁盘名称,挂载点,文件系统类型等信息。当all等于True时,返回包含/proc等特殊文件系统的挂载信息

psutil.disk_usage()

disk_usage(path):以命名元组的形式返回path所在磁盘的使用情况,包括磁盘的容量、已经使用的磁盘容量、磁盘的空间利用率等。

# 查看所有已挂在的磁盘

>>> psutil.disk_partitions()

[sdiskpart(device='/dev/vda3', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'), sdiskpart(device='/dev/vda6', mountpoint='/data1', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'), sdiskpart(device='/dev/vda2', mountpoint='/boot', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]

# 使用列表表达式查询指定挂载点信息

>>> [device for device in psutil.disk_partitions() if device.mountpoint == '/']

[sdiskpart(device='/dev/vda3', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]

>>>

# 查看磁盘使用情况

>>> psutil.disk_usage('/')

sdiskusage(total=85857402880, used=3858100224, free=81999302656, percent=4.5)

# 查看磁盘io统计汇总

>>> psutil.disk_io_counters()

sdiskio(read_count=6828, write_count=3878, read_bytes=273637888, write_bytes=30182912, read_time=6870, write_time=2079, read_merged_count=7, write_merged_count=126, busy_time=4841)

# 分别列出单个磁盘的统计信息

>>> psutil.disk_io_counters(perdisk=True)

{'vda': sdiskio(read_count=6828, write_count=3878, read_bytes=273637888, write_bytes=30182912, read_time=6870, write_time=2079, read_merged_count=7, write_merged_count=126, busy_time=4841), 'vda1': sdiskio(read_count=34, write_count=0, read_bytes=139264, write_bytes=0, read_time=1, write_time=0, read_merged_count=0, write_merged_count=0, busy_time=1), 'vda2': sdiskio(read_count=1934, write_count=2049, read_bytes=22754816, write_bytes=2097152, read_time=570, write_time=801, read_merged_count=0, write_merged_count=0, busy_time=1347), 'vda3': sdiskio(read_count=4009, write_count=1729, read_bytes=187268608, write_bytes=12412416, read_time=5302, write_time=911, read_merged_count=4, write_merged_count=115, busy_time=3114), 'vda4': sdiskio(read_count=6, write_count=0, read_bytes=18432, write_bytes=0, read_time=1, write_time=0, read_merged_count=0, write_merged_count=0, busy_time=1), 'vda5': sdiskio(read_count=48, write_count=0, read_bytes=2248704, write_bytes=0, read_time=13, write_time=0, read_merged_count=0, write_merged_count=0, busy_time=9), 'vda6': sdiskio(read_count=763, write_count=100, read_bytes=60118528, write_bytes=15673344, read_time=948, write_time=367, read_merged_count=3, write_merged_count=11, busy_time=459), 'sr0': sdiskio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, read_time=0, write_time=0, read_merged_count=0, write_merged_count=0, busy_time=0)}

Network相关

函数

详情

psutil.net_io_counter([pernic])

以命名元组的形式返回当前系统中每块网卡的网络io统计信息,包括收发字节数,收发包的数量、出错的情况和删包情况。当pernic为True时,则列出所有网卡的统计信息。

psutil.net_connections([kind])

以列表的形式返回每个网络连接的详细信息(namedtuple)。命名元组包含fd, family, type, laddr, raddr, status, pid等信息。kind表示过滤的连接类型,支持的值如下:(默认为inet)

psutil.net_if_addrs()

以字典的形式返回网卡的配置信息,包括IP地址和mac地址、子网掩码和广播地址。

psutil.net_if_stats()

返回网卡的详细信息,包括是否启动、通信类型、传输速度与mtu。

psutil.users()

以命名元组的方式返回当前登陆用户的信息,包括用户名,登陆时间,终端,与主机信息

psutil.boot_time()

以时间戳的形式返回系统的启动时间

# 查看网卡信息统计

>>> psutil.net_io_counters()

snetio(bytes_sent=9699431, bytes_recv=1895536, packets_sent=8606, packets_recv=27354, errin=0, errout=0, dropin=0, dropout=0)

# 查看网卡配置信息

>>> psutil.net_if_addrs()

{'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast=None, ptp=None)], 'eth0': [snicaddr(family=, address='172.16.5.12', netmask='255.255.255.0', broadcast='172.16.5.255', ptp=None), snicaddr(family=, address='fe80::9700:20da:ed33:9f50%eth0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), snicaddr(family=, address='52:54:00:3d:ea:06', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}

>>> a = psutil.net_if_addrs()

>>> a['eth0']

[snicaddr(family=, address='172.16.5.12', netmask='255.255.255.0', broadcast='172.16.5.255', ptp=None), snicaddr(family=, address='fe80::9700:20da:ed33:9f50%eth0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), snicaddr(family=, address='52:54:00:3d:ea:06', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]

>>> a['eth0'][0]

snicaddr(family=, address='172.16.5.12', netmask='255.255.255.0', broadcast='172.16.5.255', ptp=None)

>>> a['eth0'][0][1]

'172.16.5.12'

# 查看当前登录用户信息

>>> psutil.users()

[suser(name='root', terminal='pts/0', host='172.16.2.66', started=1574151552.0, pid=1437), suser(name='root', terminal='pts/1', host='172.16.2.66', started=1574161536.0, pid=1699)]

>>>

进程管理

psutil还提供了作为进程管理的功能函数,包括获取进程列表,判断是否存在。

函数

详情

psutil.pids()

以列表的形式返回当前正在运行的进程

psutil.pid_exists(1)

判断给点定的pid是否存在

psutil.process_iter()

迭代当前正在运行的进程,返回的是每个进程的Process对象

psutil.Process()

对进程进行封装,可以使用该类的方法获取进行的详细信息,或者给进程发送信号。

进程相关信息的方法

name:获取进程的名称

cmdline:获取启动进程的命令行参数

create_time:获取进程的创建时间(时间戳格式)

num_fds:进程打开的文件个数

num_threads:进程的子进程个数

is_running:判断进程是否正在运行

send_signal:给进程发送信号,类似与os.kill等

kill:发送SIGKILL信号结束进程

terminate:发送SIGTEAM信号结束进程

# 以列表形式查看正在运行的进程

>>> psutil.pids()

[1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 32, 33, 34, 35, 43, 44, 45, 46, 47, 48, 61, 93, 99, 233, 234, 236, 237, 238, 242, 244, 245, 260, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 346, 374, 377, 378, 497, 498, 499, 500, 501, 502, 503, 506, 508, 509, 510, 511, 512, 513, 514, 515, 612, 616, 636, 638, 639, 640, 641, 643, 646, 647, 655, 658, 661, 677, 688, 689, 901, 902, 903, 912, 925, 949, 977, 981, 992, 994, 995, 997, 1001, 1002, 1003, 1004, 1255, 1536, 1840, 1842, 1844, 1861, 1862, 1863, 1864]

# 查看进程运行状态,以布尔形式显示

>>> psutil.pid_exists(1)

True

# 迭代当前正在运行进程,查看列表中前三个实例的信息

>>> list(psutil.process_iter())[:3]

[psutil.Process(pid=1, name='systemd', started='16:19:47'), psutil.Process(pid=2, name='kthreadd', started='16:19:47'), psutil.Process(pid=3, name='ksoftirqd/0', started='16:19:47')]

>>>

# 通过进程号实例化对象

>>> process = psutil.Process(1)

>>> print(process)

psutil.Process(pid=1, name='systemd', started='16:19:47')

# 获取进程的名称

>>> process.name()

'systemd'

>>> process.create_time()

1574151587.05

>>> process.num_fds()

47

>>> process.num_threads()

1

>>>

python locust提取参数_Locust利用python模块psutil监控性能指标相关推荐

  1. python locust提取参数_python+locust性能测试学习笔记

    前言 Locust(俗称 蝗虫)一个轻量级的开源压测工具,基本功能是用Python代码描述所有测试.不需要笨拙的UI或庞大的XML,只需简单的代码即可. 环境安装 Locust支持Python 2.7 ...

  2. python修改mac地址_python利用_winreg模块制作MAC地址修改工具

    通过百度搜索知道,xp下修改MAC地址的方法主要有两个,一种是通过配置本地链接属性来实现,这种方法不适合用程序来完成,另一种是通过修改注册表来完成,本程序主要是利用了这种方法. 具体方法:Window ...

  3. python实现动态壁纸_利用Python批量提取Win10锁屏壁纸实战教程

    前言 相信使用Win10的朋友会发现,每次开机锁屏界面都会有不一样的漂亮图片,这些图片通常选自优秀的摄影作品,十分精美. 但是由于系统会自动更换这些图片,所以就算再好看的图片,也许下次开机之后就被替换 ...

  4. 利用python处理dna序列_利用Python编程提取基因组基因序列

    生物技术. DOI: 10.16660/j.cnki.1674-098X.2019.11.141 利用Python编程提取基因组基因序列 ① 庞雪原 张婷婷 (东北农业大学生命科学学院 黑龙江哈尔滨 ...

  5. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  6. python自定义函数画图_利用Python绘图和可视化(长文慎入)

    Python有许多可视化工具,但是我主要讲解matplotlib(http://matplotlib.sourceforge.net).此外,还可以利用诸如d3.js(http://d3js.org/ ...

  7. 基于python的系统构建_利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  8. python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

    (1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...

  9. python求加速度_如何利用Python 为自然语言处理加速度

    自去年发布 Python 的指代消解包(coreference resolution package)之后,很多用户开始用它来构建许多应用程序,而这些应用与我们最初的对话应用完全不同. 利用 spaC ...

最新文章

  1. python具体有什么用-python是什么意思?python有什么用?
  2. 【C 语言】字符串操作 ( strlen 与 sizeof 函数 | 计算 字符串长度 与 内存块大小 )
  3. Maven的核心笔记(2)原生:HelloWorldMaven
  4. 每日站立会议 12.04
  5. 计算机科技英语论文,计算机专业英语(第2版)——科技交流与科技论文写作
  6. ubuntu 版mysql客户端工具_使用Ubuntu 20.04作为日常办公主力使用体验(远程维护工具)...
  7. python基础之字符编码、文件处理
  8. LNMP详解(四)——LNMP原理与简单部署
  9. Spark学习笔记6:Spark调优与调试
  10. Python自学电子书大全
  11. EGE绘图之四 Gif动图播放
  12. 网上图书订阅系统的WBS图,和WBS字典
  13. selenium+python实现登QQ邮箱并发送邮件自动化
  14. 齐市青云小学三年级学计算机吗,齐齐哈尔市青云小学介绍
  15. 最新雷速问卷调查系统V7.15+ASP内核开发
  16. java 图片 转像素_使用Java改变图片的像素
  17. 用计算机研究甲骨文,基于图像识别技术的甲骨文数据系统
  18. EEG- gan:用于脑电图(EEG)大脑信号的生成对抗网络2018
  19. AcWing 1714.混合牛奶
  20. CT图像重建算法------射线驱动投影模型

热门文章

  1. RHEL6-1:系统安装
  2. 如何通过用户思维去做好社群运营工作?
  3. 如何查找pytorch路径
  4. 分享我每天的健康养生好习惯
  5. html ios返回后刷新页面,Ios中微信页面返回上一页去除缓存几种常见思路
  6. 生气了 说说腾讯游戏
  7. 基于android p的miui,小米8青春版开始适配基于Android P的MIUI10系统,米粉欢呼雀
  8. 各省市乡镇街道行政边界数据获取实战
  9. Ubuntu和Windows文件互传
  10. 例4.8 求3个数中最大的数(分别考虑整数、双精度数、长整数的情况),用函数重载方法。