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内置的字符串处理函数整理
Jan 29 Python
python实现文件名批量替换和内容替换
Mar 20 Python
Python去除列表中重复元素的方法
Mar 20 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
May 03 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
django项目简单调取百度翻译接口的方法
Aug 06 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
Python 数据可视化之Bokeh详解
Nov 02 Python
Python Django / Flask如何使用Elasticsearch
Apr 19 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
SSI指令
2006/11/25 PHP
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
php项目打包方法
2008/02/18 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
Underscore源码分析
2015/12/30 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
Python类中self参数用法详解
2020/02/13 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
软件测试有哪些?什么是配置项?
2012/02/12 面试题
大学军训感言200字
2014/02/26 职场文书
建筑工地宣传标语
2014/06/18 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python