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编程之属性和方法实例详解
May 19 Python
利用python程序生成word和PDF文档的方法
Feb 14 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
解决Python plt.savefig 保存图片时一片空白的问题
Jan 10 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
python实现简单银行管理系统
Oct 25 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
python 爬取B站原视频的实例代码
Sep 09 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
python实现局部图像放大
Nov 17 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开发文件系统实例讲解
2006/10/09 PHP
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
开源SNS系统-ThinkSNS
2008/05/18 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php数组去重实例及分析
2013/11/26 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
Python获取央视节目单的实现代码
2015/07/25 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
详解Python中的type和object
2018/08/15 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
机电工程学生自荐信范文
2013/12/07 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
干部考核评语
2014/04/29 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书