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编程语言的35个与众不同之处(语言特征和使用技巧)
Jul 07 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
python使用matplotlib绘制雷达图
Oct 18 Python
Python Numpy,mask图像的生成详解
Feb 19 Python
基于Python fminunc 的替代方法
Feb 29 Python
使用Pycharm分段执行代码
Apr 15 Python
Python如何实现邮件功能
May 27 Python
Python如何定义有可选参数的元类
Jul 31 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
Python+unittest+requests+excel实现接口自动化测试框架
Dec 23 Python
python+pyhyper实现识别图片中的车牌号思路详解
Dec 24 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 Memcached应用实现代码
2010/02/08 PHP
PHP重定向的3种方式
2013/03/07 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
初学JavaScript第二章
2008/09/30 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
Jquery 一次处理多个ajax请求的代码
2011/09/02 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
2013/12/30 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
深入理解node.js http模块
2018/01/24 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Python2.x中文乱码问题解决方法
2015/06/02 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
高中毕业自我鉴定
2013/12/19 职场文书
法制宣传标语集锦
2014/06/25 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
行政助理岗位职责
2015/02/10 职场文书
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle