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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Django框架中处理URLconf中特定的URL的方法
Jul 20 Python
浅谈django中的认证与登录
Oct 31 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
Python函数的默认参数设计示例详解
Dec 01 Python
关于Tensorflow 模型持久化详解
Feb 12 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
js日历功能对象
2012/01/12 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
nodejs基础知识
2017/02/03 NodeJs
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
使用python生成目录树
2018/03/29 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
毕业自荐信
2013/12/16 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
师德先进个人材料
2014/12/20 职场文书
工会积极分子个人总结
2015/03/03 职场文书
公司放假通知怎么写
2015/04/15 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python