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 16 Python
Python实现批量转换文件编码的方法
Jul 28 Python
常见python正则用法的简单实例
Jun 21 Python
使用Python对Excel进行读写操作
Mar 30 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
基于Python的PIL库学习详解
May 10 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
Python+pyftpdlib实现局域网文件互传
Aug 24 Python
python归并排序算法过程实例讲解
Nov 04 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
global.php
2006/12/09 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
PHP命名空间定义与用法实例分析
2019/08/14 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
Python获取apk文件URL地址实例
2013/11/01 Python
python中zip()方法应用实例分析
2016/04/16 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
大学生毕业自我鉴定
2013/11/06 职场文书
团工委书记自荐书范文
2013/12/17 职场文书
教师党员公开承诺书
2014/03/25 职场文书
英文产品推荐信
2015/03/27 职场文书
尝试使用Python爬取城市租房信息
2022/04/12 Python