Python系统监控模块psutil功能与经典用法分析


Posted in Python onMay 24, 2018

本文实例讲述了Python系统监控模块psutil功能与经典用法。分享给大家供大家参考,具体如下:

1.  psutil模块概述

psutil是一个跨平台库(http://code.google.com/p/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. psutil安装

wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz
tar -xzvf psutil-2.0.0.tar.gz
cd psutil-2.0.0
python setup.py install

补充:在Windows平台只需要在命令行界面输入如下命令即可快速安装:

pip install psutil

3. psutil使用

获取系统性能信息(CPU,内存,磁盘,网络等)

① CPU相关

查看cpu信息

import Psutil

查看cpu所有信息

>>> psutil.cpu_times()
scputimes(user=11677.09, nice=57.93, system=148675.58, idle=2167147.79, iowait=260828.48, irq=7876.28, softirq=0.0, steal=3694.59, guest=0.0, guest_nice=0.0)

显示cpu所有逻辑信息

>>> psutil.cpu_times(percpu=True)
[scputimes(user=11684.17, nice=57.93, system=148683.01, idle=2168982.08, iowait=260833.18, irq=7882.35, softirq=0.0, steal=3697.3, guest=0.0, guest_nice=0.0)]

查看用户的cpu时间比

>>> psutil.cpu_times().user
11684.4

查看cpu逻辑个数

>>> psutil.cpu_count()
1

查看cpu物理个数

>>> psutil.cpu_count(logical=False)
1

② 查看系统内存

>>> import psutil
>>> mem = psutil.virtual_memory()
>>> mem
#系统内存的所有信息
svmem(total=1040662528, available=175054848, percent=83.2, used=965718016, free=74944512, active=566755328, inactive=59457536, buffers=9342976, cached=90767360)

系统总计内存

>>> mem.total
1040662528

系统已经使用内存

>>> mem.used
965718016

系统空闲内存

>>> mem.free
112779264

获取swap内存信息

>>> psutil.swap_memory()
sswap(total=0, used=0, free=0, percent=0, sin=0, sout=0)

③ 读取磁盘参数

磁盘利用率使用psutil.disk_usage方法获取,

磁盘IO信息包括read_count(读IO数),write_count(写IO数)

read_bytes(IO写字节数),read_time(磁盘读时间),write_time(磁盘写时间),这些IO信息用

psutil.disk_io_counters()

获取磁盘的完整信息

psutil.disk_partitions()

获取分区表的参数

psutil.disk_usage('/')  #获取/分区的状态

获取硬盘IO总个数

psutil.disk_io_counters()

获取单个分区IO个数

psutil.disk_io_counters(perdisk=True)  #perdisk=True参数获取单个分区IO个数

④ 读取网络信息

网络信息与磁盘IO信息类似,涉及到几个关键点,包括byes_sent(发送字节数),byte_recv=xxx(接受字节数),
pack-ets_sent=xxx(发送字节数),pack-ets_recv=xxx(接收数据包数),这些网络信息用

获取网络总IO信息

psutil.net_io_counters()

输出网络每个接口信息

psutil.net_io_counters(pernic=True) #pernic=True

⑤ 获取当前系统用户登录信息

psutil.users()

⑥ 获取开机时间

psutil.boot_time() #以linux时间格式返回
datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S") #转换成自然时间格式

⑦ 系统进程管理

获取当前系统的进程信息,获取当前程序的运行状态,包括进程的启动时间,查看设置CPU亲和度,内存使用率,IO信息socket连接,线程数等

获取进程信息

查看系统全部进程

psutil.pids()

查看单个进程

p = psutil.Process(2423)
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() #进程开启的线程数
听过psutil的Popen方法启动应用程序,可以跟踪程序的相关信息
from subprocess import PIPE
p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
p.name()
p.username()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python 算法 排序实现快速排序
Jun 05 Python
Python入门_学会创建并调用函数的方法
May 16 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
python代码过长的换行方法
Jul 19 Python
Python3列表内置方法大全及示例代码小结
May 10 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
Django如何批量创建Model
Sep 01 Python
如何利用Python 进行边缘检测
Oct 14 Python
详解Django rest_framework实现RESTful API
May 24 #Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 #Python
matplotlib 输出保存指定尺寸的图片方法
May 24 #Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 #Python
在Django中输出matplotlib生成的图片方法
May 24 #Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 #Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 #Python
You might like
让你的PHP同时支持GIF、png、JPEG
2006/10/09 PHP
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
再探JavaScript作用域
2014/09/24 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
vue实现弹幕功能
2019/10/25 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
跟老齐学Python之for循环语句
2014/10/02 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python hash每次调用结果不同的原因
2019/11/21 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
Python函数参数分类原理详解
2020/05/28 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
护士的岗位职责
2013/12/04 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
售后客服个人自我评价
2014/09/14 职场文书
场地使用证明模板
2014/10/25 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
担保书怎么写 ?
2019/04/22 职场文书
Python基础之数据结构详解
2021/04/28 Python
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python