你好
我是你们的雨嘉叔

05-系统基础信息模块psutil之获取系统性能篇

一、简介

psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统,支持从2.4到3.7的Python版本,目前最新版本5.4.6。通常我们获取操作系统信息往往用Shell脚本来实现,如获取当前物理内存总大小及已使用大小,shell命令如下:

1、获取物理内存total值:


2、获取物理内存Used值:


相比较而言,使用psutil库实现则更加明了。psutil大小单位一般都采用字节,例如:


二、安装及使用psutil

1、安装psutil

pip3 install psutil


2、进入python

python


3、导入psutil


三、获取系统性能信息

采集系统的基本性能信息包括CPU、内存、硬盘、网络等,可以完整描述当前系统的运行状态及质量。psutil已经封装了这些方法,用户可以根据自身的应用场景,调用相应的方法来满足需求,非常的实用。

(1)CPU信息

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

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

我们可以使用Python的psutil.cpu_times()方法可以简单地得到这些信息,同时也可以获取CPU的硬件相关信息,比如CPU的物理个数与逻辑个数,具体见下面的操作例子:


解释:

方法

功能

psutil.cpu_times()

获取CPU的完整信息

psutil.cpu_times(percpu=True)

获取CPU的完整信息

(包括显示逻辑CPU)

psutil.cpu_times().user

获取用户与CPU时间比

psutil.cpu_count()

获取CPU的逻辑个数

psutil.cpu_count(logical=False)

获取CPU的物理个数

(2)内存信息

Linux系统内存利用率信息设计total(内存总数)、used(已使用内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用psutil.virtual_memory()与psutil.swap_memory()方法获取这些信息,具体见下面的操作例子:


解释:

方法

功能

men = psutil.virtual_memory()

men

获取内存完整信息

men.total

获取内存总数

men.free

获取空闲内存数

psutil.swap_memory()

获取SWAP分区信息

(3)磁盘信息

在系统的所有磁盘中,我们更加关注磁盘的利用率及IO信息,其中磁盘利用率使用psutil.disk_usage方法来获取。磁盘IO信息包括read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间等)。这些IO信息可以使用psutil.disk_io_counters()获取,具体见下面的操作例子:


解释:

方法

功能

psutil.disk_partitions()

获取磁盘完整信息

psutil.disk_usage(‘/’)

获取分区参数使用情况

psutil.disk_io_counters()

获取磁盘总的IO个数、读写信息

psutil.disk_io_counters(perdisk=True)

获取单个分区的IO个数、读写信息

(4)网络信息

系统的网络信息与磁盘IO类似,涉及几个关键点,包括bytes_sent(发送字节数)、bytes_recv(接收字节数)、packet_sent(发送数据包数)、packets_recv(接收数据包数)等。这些网络信息使用psutil.net_io_counters()方法获取,具体见下面的操作例子:


解释:

方法

功能

psutil.net_io_counters()

获取网络总的IO信息

psutil.net_io_counters(pernic=True)

输出每个接口的网络IO信息

(5)其他信息模块

除了前面介绍的几个获取系统基本信息的方法,psutil模块还支持获取用户登录、开机时间等信息,具体见下面的操作例子:


解释:

方法

功能

psutil.users()

返回当前登录系统的用户信息

psutil.boot_time()

获取当前系统时间

datetime.datetime.fromtimestamp(psutil.boot_time())

.strftime(“{815ac408a99669c280d890a3c1592527154068adde55fb55fc5b84dc9fd9f61b}Y-{815ac408a99669c280d890a3c1592527154068adde55fb55fc5b84dc9fd9f61b}m-{815ac408a99669c280d890a3c1592527154068adde55fb55fc5b84dc9fd9f61b}d {815ac408a99669c280d890a3c1592527154068adde55fb55fc5b84dc9fd9f61b}H:{815ac408a99669c280d890a3c1592527154068adde55fb55fc5b84dc9fd9f61b}M:{815ac408a99669c280d890a3c1592527154068adde55fb55fc5b84dc9fd9f61b}S”)

换算成正常系统时间(需要导入datetime包)

其他用法请参见:https://psutil.readthedocs.io/en/latest/

赞(4)
未经允许不得转载:嘉叔的博客 » 05-系统基础信息模块psutil之获取系统性能篇
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址