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装饰器验证配置文件示例
Feb 24 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
python绘图方法实例入门
May 19 Python
深入解析Python的Tornado框架中内置的模板引擎
Jul 11 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
Pandas中Series和DataFrame的索引实现
Jun 27 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
Python常遇到的错误和异常
Nov 02 Python
python ConfigParser库的使用及遇到的坑
Feb 12 Python
Python os和os.path模块详情
Apr 02 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将html转为图片的实现方法
2017/05/19 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
Highcharts入门之简介
2016/08/02 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
python中sets模块的用法实例
2014/09/30 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
itchat接口使用示例
2017/10/23 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
python实现可逆简单的加密算法
2019/03/22 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
委托证明书
2014/09/17 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
校长师德表现自我评价
2015/03/04 职场文书