psutil 是一个跨平台,能够轻松实现获取系统执行的程序和利用率 (包括 CPU 、内存、磁碟、互联网等) 资讯。主要应用域系统监控,分析和限制系统资源及程序管理。它实现了同等命令列工具提供的功能,如 ps/top/lsof/netstat/who/df/kill/nice/free/nice/ionstat/iotop/uptime/pidof/tty/taskset/pmap 等。支援从 2.4 到 3.4 的 python 版本。
psutil 大小单位一般都采用位元组。
安装 psutil

1
2
3
4
5

wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz –no-check-certificate
tar -xzvf psutil-2.0.0.tar.gz
cd psutil-2.0.0
python setup.py install   #psutil/_psutil_linux.c:12:20: 致命错误:Python.h:没有那个档案或目录
yum install python-devel.x86_64

1 、 cpu 资讯
linux 操作系统的 CPU 利用率有以下几个部分:
user time,执行用护程序的时间百分比
system time,执行核心程序和中伏案的时间百分比
wait io,由于 IO 等待而使 CPU 处于 idle(空闲) 状态的时间百分比;
Idle,CPU 处于 idle 状态的时间百分比
我们使用 python 的 psutil.cpu_times() 方法可以非常简单地得到这些资讯,同事也可以获取 CPU 的硬体相关资讯,比如 CPU 的硬体相关资讯,比如 CPU 的物理个数域逻辑个数。

1
2
3
4
5
6
7
8

>>> psutil.cpu_times()                  #检视 cpu 所有资讯
scputimes(user=762.76, nice=4.47, system=428.97, idle=4012472.08, iowait=207.27, irq=0.0, softirq=7.07, steal=0.0, guest=0.0, guest_nice=0.0)
>>> psutil.cpu_times().user             #检视使用者的 cpu 时间比
762.77
>>> psutil.cpu_count()                  #检视 cpu 逻辑个数
2
>>> psutil.cpu_count(logical=False)     #检视 cpu 物理个数
2

2 、内存资讯
linux 系统的内存利用率资讯涉及 total(内存总数) 、 used(已使用的内存数) 、 free(空闲内存数) 、 buffers(缓冲使用数) 、 cache(WordPress 加速缓存使用数) 、 swap(交换分割槽使用数) 等。分别使用 psutil.virtual_memory() 与 psutil.swap_memory() 方法获取这些资讯。

1
2
3
4
5
6
7
8
9
10
11

>>> import psutil
>>> mem = psutil.virtual_memory()           #使用 psutil.virtual_memory 方法获取内存完整资讯
>>> mem
svmem(total=3975487488L, available=2716561408L, percent=31.7, used=2024685568L, free=1950801920L, active=1328680960, inactive=484872192, buffers=1433600L, cached=764325888)
>>> mem.total                               #获取内存总数
3975487488L
>>> mem.free                                #获取空闲内存
1950801920L
>>> psutil.swap_memory()                    #获取 SWAP 分割槽资讯
sswap(total=1073737728L, used=0L, free=1073737728L, percent=0.0, sin=0, sout=0)
>>>

3 、磁碟资讯
磁碟利用率使用 psutil.disk_usage 方法获取,
磁碟 IO 资讯包括 read_count(读 IO 数),write_count(写 IO 数),read_bytes(IO 写位元组数),read_time(磁碟读时间),write_time(磁碟写时间), 这些 IO 资讯用 psutil_io_counters() 获取。

1
2
3
4

psutil.disk_io_counters()        #获取磁碟总的 IO 个数
psutil.disk_partitions()        #获取磁碟的完整资讯
psutil.disk_usage(‘/’)   #获取/分割槽(引数)的使用状态
psutil.disk_io_counters(perdisk=True)    #perdisk=True 引数获取单个分割槽 IO 个数、读写资讯

4 、读取互联网资讯
互联网资讯与磁碟 IO 资讯类似, 涉及到几个关键点,包括 byes_sent(传送位元组数),byte_recv=xxx(接受位元组数),pack-ets_sent=xxx(传送位元组数),pack-ets_recv=xxx(接收资料包数), 这些互联网资讯用 psutil.net_io_counters() 方法获取。

1
2

psutil.net_io_counters()  #获取互联网总 IO 资讯
psutil.net_io_counters(pernic=True)     #pernic=True 输出每个互联网介面的 IO 资讯

5 、获取当前系统使用者登入资讯

1
2
3
4

psutil.users()      #获取当前登入系统的使用者资讯
import psutil,datetime
psutil.boot_time()     #获取开机时间,以 linux 时间格式返回
datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime(“%Y-%m-%d %H: %M: %S”) #转换成自然时间格式

6 、系统程序管理方法
获取当前系统的程序资讯, 获取当前程式的执行状态, 包括程序的启动时间, 检视设定 CPU 亲和度, 内存使用率,IO 资讯、 socket 连线、执行绪数等。
(1)获取程序资讯
检视系统全部程序
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

psutil.pids()    #列出所有程序 ID
 p = psutil.Process(2423)     #例项化一个 process 物件,引数为一程序 PID
 p.name()   #程序名
 p.exe()    #程序的 bin 路径
 p.cwd()    #程序的工作目录绝对路径
 p.status()   #程序状态
 p.create_time()  #程序建立时间
 p.uids()    #程序 uid 资讯
 p.gids()    #程序的 gid 资讯
 p.cpu_times()   #程序的 cpu 时间资讯, 包括 user,system 两个 cpu 资讯
 p.cpu_affinity()  #get 程序 cpu 亲和度, 如果要设定 cpu 亲和度, 将 cpu 号作为参考就好
 p.memory_percent()  #程序内存利用率
 p.memory_info()    #程序内存 rss,vms 资讯
 p.io_counters()    #程序的 IO 资讯, 包括读写 IO 数字及引数
 p.connectios()   #返回程序列表
 p.num_threads()  #程序开启的执行绪数

(2)psutil 的 Popen 类启动应用程式,可以跟踪程式的相关资讯

1
2
3
4
5
6

from subprocess import PIPE
p = psutil.Popen([“/usr/bin/python”, “-c”, “print(‘hello’)”],stdout=PIPE)
p.name()
p.username()
p.communicate()
p.cpu_times()           #得到程序执行的 CPU 时间