psutil模块能够轻松获取系统能够运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。主要用于系统监控,分析和限制系统资源及进程的管理。
它实现了很多同等命令行工具提供的功能,如ps、top、df等。
一. psutil的安装与基本使用
楼主本人使用的系统是osx 10.11.1。使用的python版本是系统自带的2.7.10.
下载软件包
psutil的下载网址为:下载网址。然后选择psutil-3.2.2.tar.gz
进行下载。
具体安装步骤:
1 2 3
| 1. tar -zxvf psutil-3.2.2.tar.gz 2. cd psutil-3.2.2 3. sudo python setup.py install
|
psutil的基本使用
首先需要进行模块的导入,然后就可以进行使用了,具体事例如下:
1 2
| import psutil print psutil.virtual_memory()
|
二. 系统性能信息
psutil模块已经分装了系统性能信息的方法,主要分为以下几个方面:
CPU
1 2 3 4 5 6 7 8 9 10 11
| # 获取CPU完整信息 print psutil.cpu_times()
# 获取单项数据信息,如user的CPU时间比 print psutil.cpu_times().user
# 获取cpu的逻辑个数 print psutil.cpu_count()
# 获取cpu的物理个数 print psutil.cpu_count(logical=False)
|
内存
1 2 3 4 5 6 7 8 9 10 11
| #获取内存全部信息 print psutil.virtual_memory()
#获取内存总数 print psutil.virtual_memory().total
#获取空闲内存属 print psutil.virtual_memory().free
#获取SWAP分区信息 print psutil.swap_memory()
|
磁盘
1 2 3 4 5 6 7 8 9 10 11
| #获取磁盘的完整信息 print psutil.disk_partitions()
#获取分区的使用情况 print psutil.disk_usage('/')
#获取硬盘总的IO个数 print psutil.disk_io_counters()
#获取单个分区IO个数 print psutil.disk_io_counters(perdisk=True)
|
网络
1 2 3 4 5
| #获取网络总的IO信息 print psutil.net_io_counters()
#获取每个网络接口的IO信息 print psutil.net_io_counters(pernic=True)
|
####其他系统信息(登陆用户,开机时间)
1 2 3 4 5 6
| 获取当前登陆系统的用户信息 print psutil.users()
#获取开机时间,以linux时间戳的格式返回 import datetime print datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
|
##三. 系统进程管理方法
获取当前系统的进程信息,可以得知程序的运行状态,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO信息、socket链接、线程数等,通过这些信息可以很好的看出进程的状态,以便进行优化。
####进程信息
获取全部进程的信息,或者根据一个进程ID得到进程的process对象,然后获取该进程的一些信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #获取所有进程的PID print psutil.pids()
#实例化一个process对象,参数为一个进程PID p=psutil.Process(1788) print p.name() #进程名 print p.exe() #进程路径 print p.cwd() #进程工作目录绝对路径 print p.status() #进程的状态 print p.create_time() #进程创建的时间 print p.uids() #进程uid信息 print p.gids() #进程gid信息 print p.cpu_times() #进程CPU时间信息 print p.cpu_affinity() #进程cpu亲和度 print p.memory_percent() #进程内存利用率 print p.memory_info() #进程内存rss,vms信息 print p.io_counters() #进程IO信息 print p.connections() #打开进程socket的namedutples列表 print p.num_threads() #进程开启的线程数
|
####Popen类的使用
psutil提供的Popen类的作用是获取用户启动的应用程序进程信息,以便跟踪程序进程的运行状态。
1 2 3 4 5 6
| #通过psutil的Popen方法启动的应用程序,可以进行跟踪 from subprocess import PIPE p=psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout=PIPE) print p.name() print p.username() print p.cpu_times()
|
##四. 参考文档
- psutil的github地址
- psutil的文档说明