系统性能信息模块之psutil模块
一、psutil模块介绍
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 >>> psutil.cpu_count(logical=False) #获取CPU的物理个数 >>> psutil.cpu_stats()
scpustats(ctx_switches=, interrupts=, soft_interrupts=, syscalls=)
>>> psutil.cpu_freq()
scpufreq(current=, min=, max=)
获取内存信息
Linux系统的内存利用率涉及total(内存总数)、used(以使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用
psutil.virtual_memory()与psutil.swap_memory()方法获取这些信息,示例如下:
>>> import psutil
>>> psutil.virtual_memory() #使用psutil.virtaul_memory方法获取内存完整信息
svmem(total=, available=, percent=67.6, used=, free=, active=, inactive=, wired=)
>>> psutil.swap_memory() #获取SWAP分区信息
sswap(total=, used=, free=, percent=, sin=, sout=)
>>> psutil.virtual_memory().total #获取内存总数 >>> psutil.virtual_memory().free #获取空闲内存数
获取磁盘信息
磁盘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=, used=, free=, percent=36.4)
>>> psutil.disk_io_counters() #psutil.disk_io_counters获取磁盘总的IO个数、读写信息
sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=)
>>> psutil.disk_io_counters(perdisk=True) #perdisk=True 参数获取单个分区IO个数、读写信息
{'disk0': sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=)}
获取网络信息
系统的网络信息与磁盘IO类似,涉及几个关键点,包括bytes_set(发送字节数)、bytes_recv(接收字节数)、packets_set(发送数据包数)、packets_recv(接收数据包数)
>>> psutil.net_io_counters() #psutil.net_io_counters获取网络总的IO信息,默认pernice=False
snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=)
>>> psutil.net_io_counters(pernic=True) #pernice=True 参数 输出每个网络接口的IO信息
{'lo0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'gif0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'stf0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'en0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'en2': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'en4': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'en1': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'en3': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'bridge0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'p2p0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'awdl0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'en6': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'utun0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'en10': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'vmnet1': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'vmnet8': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=)} >>> psutil.net_if_addrs()
{'lo0': [snic(family=<AddressFamily.AF_INET: >, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET6: >, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET6: >, address='fe80::1%lo0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None)], 'en10': [snic(family=<AddressFamily.AF_INET: >, address='192.168.12.119', netmask='255.255.255.0', broadcast='192.168.12.255', ptp=None), snic(family=<AddressFamily.AF_LINK: >, address='d4:3a:65:07:2a:e2', netmask=None, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET6: >, address='fe80::18a7:9f11:40a7:c7f4%en10', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None)], 'vmnet1': [snic(family=<AddressFamily.AF_INET: >, address='192.168.75.1', netmask='255.255.255.0', broadcast='192.168.75.255', ptp=None), snic(family=<AddressFamily.AF_LINK: >, address='00:50:56:c0:00:01', netmask=None, broadcast=None, ptp=None)], 'vmnet8': [snic(family=<AddressFamily.AF_INET: >, address='192.168.121.1', netmask='255.255.255.0', broadcast='192.168.121.255', ptp=None), snic(family=<AddressFamily.AF_LINK: >, address='00:50:56:c0:00:08', netmask=None, broadcast=None, ptp=None)], 'en0': [snic(family=<AddressFamily.AF_LINK: >, address='8c:85:90:3c:fa:20', netmask=None, broadcast=None, ptp=None)], 'en2': [snic(family=<AddressFamily.AF_LINK: >, address='5a:00:24:a0:8d:04', netmask=None, broadcast=None, ptp=None)], 'en4': [snic(family=<AddressFamily.AF_LINK: >, address='5a:00:24:a0:8d:05', netmask=None, broadcast=None, ptp=None)], 'en1': [snic(family=<AddressFamily.AF_LINK: >, address='5a:00:24:a0:8d:00', netmask=None, broadcast=None, ptp=None)], 'en3': [snic(family=<AddressFamily.AF_LINK: >, address='5a:00:24:a0:8d:01', netmask=None, broadcast=None, ptp=None)], 'bridge0': [snic(family=<AddressFamily.AF_LINK: >, address='5a:00:24:a0:8d:00', netmask=None, broadcast=None, ptp=None)], 'p2p0': [snic(family=<AddressFamily.AF_LINK: >, address='0e:85:90:3c:fa:20', netmask=None, broadcast=None, ptp=None)], 'awdl0': [snic(family=<AddressFamily.AF_LINK: >, address='62:46:b9:22:e2:44', netmask=None, broadcast=None, ptp=None)], 'en6': [snic(family=<AddressFamily.AF_LINK: >, address='ac:de:48:00:11:22', netmask=None, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET6: >, address='fe80::aede:48ff:fe00:1122%en6', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None)], 'utun0': [snic(family=<AddressFamily.AF_INET6: >, 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: >, speed=, mtu=), 'gif0': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=), 'stf0': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=), 'en0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=), 'en2': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: >, speed=, mtu=), 'en4': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: >, speed=, mtu=), 'en1': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: >, speed=, mtu=), 'en3': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: >, speed=, mtu=), 'bridge0': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=), 'p2p0': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=), 'awdl0': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=), 'en6': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=), 'utun0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=), 'en10': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: >, speed=, mtu=), 'vmnet1': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=), 'vmnet8': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: >, speed=, mtu=)}
other system info
>>> import psutil
>>> psutil.users() #psutil.users方法返回当前登录系统的用户信息
[suser(name='root', terminal='pts/0', host='192.168.121.1', started=1527069184.0)]
>>> psutil.boot_time() #psutil.boot_time方法获取开机时间,以Linux时间戳格式返回
1527069188.0
>>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S") #转换成自然时间格式
'2018-05-23 17:53:08'
系统性能信息模块之psutil模块的更多相关文章
- 1.python系统性能信息模块之psutil模块
Psutil(进程和系统实用程序)是一个跨平台的库,用于在Python中检索有关运行进程和系统资源利用率(CPU,内存,磁盘,网络)的信息.它主要用于系统监视,分析和限制系统资源及运行进程的管理.它实 ...
- python之系统性能信息模块psutil
系统性能信息模块psutil 跨平台库 轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息. 主要用于系统监控,分析和限制系统资源及进程的管理 实现同等命令行工具提供的功能( ...
- python自动化运维笔记1 —— 系统性能信息模块psutil
一.系统基础信息模块 1.1 系统性能信息模块psutil psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率( ...
- python之psutil模块(获取系统性能数据)
psutil模块 1.介绍 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...
- python之psutil模块(获取系统性能信息(CPU,内存,磁盘,网络)
一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...
- 系统性能信息模块psutil
目录 前言 获取系统性能信息 CPU 内存 磁盘 网络信息 其他系统信息 系统进程管理方法 进程信息 popen类 查看系统硬件的小脚本 前言 psutil 是一个跨平台库,能够轻松实现获取系统运行的 ...
- python2.7系统性能监控psutil模块
系统环境:Centos7.4,系统自带python2.7.5 登录psutil官网,下载psutil的tar包:psutil-5.4.6.tar.gz,并使用命名sha256sum和官网的包进行核对, ...
- 系统性能信息模块--psutil
#安装psutil模块#pip install psutil -i https://pypi.doubanio.com/simple #导入psutil模块import psutilimport da ...
- [Python Study Notes]psutil模块
系统性能信息模块psutil psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(CPU,内存,磁盘,网络等)信息,主要应用于系统监控,分析和限制系统资源及进程的管理,它实现了同等 ...
随机推荐
- 基于Oracle的EntityFramework的WEBAPI2的实现(四)——自动生成在线帮助文档
打开我们项目中的Area文件夹,正常情况下,我们会发现已经有了一个名字叫做[HelpPage]的区域(Area),这个区域是vs帮助我们自动建立的,它是一个mvc(不是webapi),它有普通的Con ...
- pandas之DateFrame 数据过滤+遍历行+读写csv-txt-excel
# XLS转CSV df = pd.read_excel(r'列表.xls') df2 = pd.DataFrame()df2 = df2.append(list(df['列名']), ignore_ ...
- Unit02: jQuery事件处理 、 jQuery动画
Unit02: jQuery事件处理 . jQuery动画 jQuery实现购物车案例 <!DOCTYPE html> <html> <head> <titl ...
- STM32启动过程解读与跟踪验证
经过查阅各种官方文献和对代码进行单步跟踪,详细地叙述了STM32加电启动的具体过程.对于关键性的语句都指明了出处.下面将学习成果分享给大家,由于笔者知识有限,不当之处敬请指出. 为了更好的说明问题,先 ...
- eclipse Mars(4.5.2)安装pydev后不出现
一.环境 windows 7 64bit eclipse 4.5.2 pydev jdk7u55 二.安装步骤 1. 安装JDK eclipse依赖于java环境,所以需要安装java运行环境JRE. ...
- Linux:数据库服务(Mysql安装及链接、远程链接、genelog)
yum search + 服务:查询服务是否存在: yum remove + 服务:卸载服务: 使用 service 操作服务时,服务的名称后要加上字符 d,如启动:service my ...
- java代码---------再练习ChatAt()的用法
总结: 没有理解方法的含义.瞎用 package com.mmm; //实现字符串中某个字符出现的次数 public class Mo { public static void main(String ...
- Macbook Pro上C++编程
Xcode新建一个c/c++程序语言工程_百度经验 http://jingyan.baidu.com/article/e2284b2b63bdede2e6118d2a.html
- [Java.web][eclipse]经验集
自动提示部分内容来自:http://www.cnblogs.com/mashuangying2016/p/6549991.html 使用 Eclipse 调试 Tomcat 的设置: Window - ...
- 第八章 搭建hadoop2.2.0集群,Zookeeper集群和hbase-0.98.0-hadoop2-bin.tar.gz集群
安装配置jdk,SSH 一.首先,先搭建三台小集群,虚拟机的话,创建三个 下面为这三台机器分别分配IP地址及相应的角色:集群有个特点,三台机子用户名最好一致,要不你就创建一个组,把这些用户放到组里面去 ...