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函数中的默认参数
Mar 30 Python
Python中设置变量作为默认值时容易遇到的错误
Apr 03 Python
Python守护进程和脚本单例运行详解
Jan 06 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
对python中的for循环和range内置函数详解
Apr 17 Python
Python使用googletrans报错的解决方法
Sep 25 Python
python config文件的读写操作示例
Sep 27 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
pytorch中的卷积和池化计算方式详解
Jan 03 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
Python unittest装饰器实现原理及代码
Sep 08 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中将网页导出为Word文档的代码
2012/05/25 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
PHP如何实现跨域
2016/05/30 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
7个JS基础知识总结
2014/03/05 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python 实现在Excel末尾增加新行
2018/05/02 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
详解Python_shutil模块
2019/03/15 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python实现ip代理池功能示例
2019/07/05 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
python global关键字的用法详解
2019/09/05 Python
python序列类型种类详解
2020/02/26 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
阿拉伯世界最大的电子商务网站:Souq沙特阿拉伯
2016/10/28 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
园林系毕业生求职信
2014/06/23 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书