1.模块简介

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.4到3.4的 Python版本,目前最新版本为2.0.0。

通常我们获取操作系统信息往往采 用编写shell来实现,如获取当前物理内存总大小及已使用大小,shell命 令如下:

相比较而言,使用psutil库实现则更加简单明了。psutil大小单位一 般都采用字节,如下:

2.获取系统性能信息

采集系统的基本性能信息包括CPU、内存、磁盘、网络等,可以 完整描述当前系统的运行状态及质量。psutil模块已经封装了这些方法, 用户可以根据自身的应用场景,调用相应的方法来满足需求,非常简单 实用。

(1)CPU信息 Linux操作系统的CPU利用率有以下几个部分: ·

User Time,执行用户进程的时间百分比; ·

System Time,执行内核进程和中断的时间百分比; ·

Wait IO,由于IO等待而使CPU处于idle(空闲)状态的时间百分 比; ·

Idle,CPU处于idle状态的时间百分比。

我们使用Python的psutil.cpu_times()方法可以非常简单地得到这 些信息,同时也可以获取CPU的硬件相关信息,比如CPU的物理个数与 逻辑个数,具体见下面的操作例子:

获取全部cpu信息

>>>psutil.cpu_times()

scputimes(user=55.56, nice=0.0, system=28.83, idle=2811.87, iowait=71.64, irq=0.0, softirq=0.4, steal=0.0, guest=0.0, guest_nice=0.0)

获取cpu某个指标的cpu 信息

>>>psutil.cpu_times().user #cpu用户时间百分比57.08

>>>psutil.cpu_count() #逻辑cpu的数量1

>>> psutil.cpu_count(logical=False) #物理cpu的数量1

(2)内存信息

Linux系统的内存利用率信息涉及total(内存总数)、used(已使 用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、 cache(缓存使用数)、swap(交换分区使用数)等,分别使用 psutil.virtual_memory()与psutil.swap_memory()方法获取这些信 息,具体见下面的操作例子:

获取全部内存信息

>>> mem=psutil.virtual_memory()>>>mem

svmem(total=1928081408, available=1635614720, percent=15.2, used=117481472, free=1023430656, active=433111040, inactive=346320896, buffers=55558144, cached=731611136, shared=524288, slab=91049984)

获取内存某个指标信息

>>>mem.total #总内存1928081408

>>>mem.free #空闲内存1023430656

>>>psutil.swap_memory() #swap分区信息

sswap(total=0, used=0, free=0, percent=0.0, sin=0, sout=0)

(3)磁盘信息

在系统的所有磁盘信息中,我们更加关注磁盘的利用率及IO信 息,其中磁盘利用率使用psutil.disk_usage方法获取。磁盘IO信息包括 read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节 数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、 write_time(磁盘写时间)等。这些IO信息可以使用 psutil.disk_io_counters()获取,具体见下面的操作例子:

>>>psutil.disk_partitions() #获取磁盘的挂载信息

[sdiskpart(device='/dev/vda1', mountpoint='/', fstype='ext4', opts='rw,noatime,data=ordered')]>>> psutil.disk_usage('/') #获取根目录的磁盘使用情况

sdiskusage(total=52709261312, used=1797283840, free=48210923520, percent=3.6)>>>psutil.disk_io_counters() #获取磁盘整体io的信息

sdiskio(read_count=17654, write_count=16921, read_bytes=336112640, write_bytes=1199091712, read_time=94260, write_time=2551193, read_merged_count=251, write_merged_count=12212, busy_time=111944)>>> psutil.disk_io_counters(perdisk=True) #更细粒度的获取每块盘的磁盘io信息

{'vda': sdiskio(read_count=16442, write_count=17139, read_bytes=296236032, write_bytes=1200701440, read_time=93595, write_time=2554037, read_merged_count=251, write_merged_count=12330, busy_time=111885), 'sr0': sdiskio(read_count=1212, write_count=0, read_bytes=39876608, write_bytes=0, read_time=665, write_time=0, read_merged_count=0, write_merged_count=0, busy_time=513), 'loop0': sdiskio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, read_time=0, write_time=0, read_merged_count=0, write_merged_count=0, busy_time=0), 'vda1': sdiskio(read_count=16412, write_count=16436, read_bytes=295162880, write_bytes=1200701440, read_time=93521, write_time=2552650, read_merged_count=251, write_merged_count=12330, busy_time=110707)}

(4)网络信息

系统的网络信息与磁盘IO类似,涉及几个关键点,包括 bytes_sent(发送字节数)、bytes_recv=28220119(接收字节数)、 packets_sent=200978(发送数据包数)、packets_recv=212672(接收数 据包数)等。这些网络信息使用psutil.net_io_counters()方法获取,具 体见下面的操作例子:

>>> psutil.net_io_counters() #使用psutil.net_io_counters获取网络总的IO信 息,默人pernic=False

snetio(bytes_sent=3097792, bytes_recv=84277258, packets_sent=30395, packets_recv=76803, errin=0, errout=0, dropin=0, dropout=0)>>> psutil.net_io_counters(pernic=True) #pernic=True获取每个网络接口的网络io信息

{'lo': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=3151297, bytes_recv=84313463, packets_sent=30879, packets_recv=77288, errin=0, errout=0, dropin=0, dropout=0)}

(5)其他系统信息

除了前面介绍的几个获取系统基本信息的方法,psutil模块还支持 获取用户登录、开机时间等信息,具体见下面的操作例子:

>>>psutil.users()

[suser(name='root', terminal='pts/0', host='58.101.51.163', started=1556753152.0, pid=10408), suser(name='root', terminal='pts/1', host='58.101.51.163', started=1556755328.0, pid=13692)]

>>> importpsutil,datetime>>>psutil.boot_time() #系统开机时间,时间戳的形式1556752934.0

>>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S") #格式转化成自然时间'2019-05-02 07:22:14'

系统进程管理方法 获得当前系统的进程信息,可以让运维人员得知应用程序的运行 状态,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO 信息、socket连接、线程数等,这些信息可以呈现出指定进程是否存 活、资源利用情况,为开发人员的代码优化、问题定位提供很好的数据 参考。

(1)进程信息 psutil模块在获取进程信息方面也提供了很好的支持,包括使用 psutil.pids()方法获取所有进程PID,使用psutil.Process()方法获取 单个进程的名称、路径、状态、系统资源利用率等信息,具体见下面的 操作例子:

>>> importpsutil>>>psutil.pids() #列出所有进程PID

[1, 2, 3, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 27, 28, 29, 30, 38, 39, 40, 41, 42, 43, 56, 102, 221, 228, 229, 230, 231, 233, 234, 238, 253, 254, 328, 358, 360, 443, 468, 470, 473, 474, 476, 679, 783, 858, 864, 879, 880, 1240, 3015, 3304, 3576, 3586, 3587, 9028, 9119, 10387, 10408, 13377, 13690, 13692, 18041, 18450, 18874, 18947]>>> p=psutil.Process(10387) #实例化一个Process对象,参数为一进程PID>>>p.name() #进程名'sshd'

>>>p.exe() #进程执行路径'/usr/sbin/sshd'

>>>p.cwd() #进程工作目录绝对路径'/'>>> p.status() #进程状态

'sleeping'

>>>p.create_time() #进程创建时间,时间戳格式1556753100.62

>>>p.uids() #进程uid信息

puids(real=0, effective=0, saved=0)>>>p.gids() #进程gid信息

pgids(real=0, effective=0, saved=0)>>>p.cpu_times() #进程CPU时间信息,包括user、system两个CPU时间

pcputimes(user=0.11, system=0.18, children_user=0.0, children_system=0.0)>>>p.memory_percent() #进程内存利用率0.28764262634288107

>>>p.io_counters() #进程IO信息,包括读写IO数及字节数

pio(read_count=4335, write_count=3971, read_bytes=0, write_bytes=0, read_chars=403466, write_chars=301488)>>>p.connections() #返回打开进程socket的namedutples列表,包括fs、family、 laddr

[pconn(fd=3, family=2, type=1, laddr=addr(ip='172.27.0.7', port=22), raddr=addr(ip='58.101.51.163', port=38431), status='ESTABLISHED')]>>>p.num_threads() #进程开启的线程数1

#进程开启的线程数

psutil提供的popen类的作用是获取用户启动的应用程序进程信息, 以便跟踪程序进程的运行状态。具体实现方法如下:

>>> importpsutil>>> from subprocess importPIPE>>> p=psutil.Popen(["/usr/bin/python","-c" "print ('hello')"],stdout=PIPE)>>>p.name()'python'

>>>p.username()'root'

>>>p.communicate()

('hello\n', None)>>>p.cpu_times() #得到进程运行的CPU时间

pcputimes(user=0.01, system=0.0, children_user=0.0, children_system=0.0)

3.关于psutil模块更多用法

>>>dir(psutil)

['AF_LINK', 'AIX', 'AccessDenied', 'BSD', 'CONN_CLOSE', 'CONN_CLOSE_WAIT', 'CONN_CLOSING', 'CONN_ESTABLISHED', 'CONN_FIN_WAIT1', 'CONN_FIN_WAIT2', 'CONN_LAST_ACK', 'CONN_LISTEN', 'CONN_NONE', 'CONN_SYN_RECV', 'CONN_SYN_SENT', 'CONN_TIME_WAIT', 'Error', 'FREEBSD', 'IOPRIO_CLASS_BE', 'IOPRIO_CLASS_IDLE', 'IOPRIO_CLASS_NONE', 'IOPRIO_CLASS_RT', 'LINUX', 'MACOS', 'NETBSD', 'NIC_DUPLEX_FULL', 'NIC_DUPLEX_HALF', 'NIC_DUPLEX_UNKNOWN', 'NoSuchProcess', 'OPENBSD', 'OSX', 'POSIX', 'POWER_TIME_UNKNOWN', 'POWER_TIME_UNLIMITED', 'PROCFS_PATH', 'Popen', 'Process', 'RLIMIT_AS', 'RLIMIT_CORE', 'RLIMIT_CPU', 'RLIMIT_DATA', 'RLIMIT_FSIZE', 'RLIMIT_LOCKS', 'RLIMIT_MEMLOCK', 'RLIMIT_MSGQUEUE', 'RLIMIT_NICE', 'RLIMIT_NOFILE', 'RLIMIT_NPROC', 'RLIMIT_RSS', 'RLIMIT_RTPRIO', 'RLIMIT_RTTIME', 'RLIMIT_SIGPENDING', 'RLIMIT_STACK', 'RLIM_INFINITY', 'STATUS_DEAD', 'STATUS_DISK_SLEEP', 'STATUS_IDLE', 'STATUS_LOCKED', 'STATUS_PARKED', 'STATUS_RUNNING', 'STATUS_SLEEPING', 'STATUS_STOPPED', 'STATUS_TRACING_STOP', 'STATUS_WAITING', 'STATUS_WAKING', 'STATUS_ZOMBIE', 'SUNOS', 'TimeoutExpired', 'WINDOWS', 'ZombieProcess', '_LOWEST_PID', '_PY3', '_TOTAL_PHYMEM', '__all__', '__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '_as_dict_attrnames', '_assert_pid_not_reused', '_common', '_compat', '_cpu_busy_time', '_cpu_times_deltas', '_cpu_tot_time', '_last_cpu_times', '_last_cpu_times_2', '_last_per_cpu_times', '_last_per_cpu_times_2', '_lock', '_pmap', '_ppid_map', '_pprint_secs', '_pslinux', '_psplatform', '_psposix', '_psutil_linux', '_psutil_posix', '_timer', '_wrap_numbers', 'boot_time', 'collections', 'contextlib', 'cpu_count', 'cpu_freq', 'cpu_percent', 'cpu_stats', 'cpu_times', 'cpu_times_percent', 'datetime', 'disk_io_counters', 'disk_partitions', 'disk_usage', 'errno', 'functools', 'getloadavg', 'long', 'net_connections', 'net_if_addrs', 'net_if_stats', 'net_io_counters', 'os', 'pid_exists', 'pids', 'process_iter', 'pwd', 'sensors_battery', 'sensors_fans', 'sensors_temperatures', 'signal', 'subprocess', 'swap_memory', 'sys', 'test', 'threading', 'time', 'users', 'version_info', 'virtual_memory', 'wait_procs']

psutil官网:https://psutil.readthedocs.io/en/latest/

psuti的git:https://github.com/giampaolo/psutil

用python开发的运维管理系统_python运维开发常用模块(一)psutil相关推荐

  1. python运维管理系统_运维管理系统方案

    - 运维管理系统方案 概述 伴随着企事业网络规模的不断扩大,企事业服务器的增多,企事业管理的信息化,企事业网络管理 也变的越来越重要.一旦网络.服务器.数据库.各种应用出现问题,常常会给企事业造成很大 ...

  2. python实现简单的名字管理系统_python列表使用实现名字管理系统

    python列表使用实现名字管理系统 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python列表使用实现名字管理系统.txt ] (友情提示:右键点上行tx ...

  3. python 二维列表_python二维列表

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 方法一:使用 lambda 关键词辅助对二维列表进行排序,lambda的使用方法 ...

  4. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

  5. python运维方法_Python运维开发基础09-函数基础【转】

    上节作业回顾 #!/usr/bin/env python3#-*- coding:utf-8 -*-#author:Mr.chen#实现简单的shell命令sed的替换功能 importsys,os ...

  6. python怎么写运维脚本_python运维脚本实例

    file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先 ...

  7. python 运维包_python运维常用模块

    1.psutil是一个跨平台库(https://github.com/giampaolo/psutil) 能够实现获取系统运行的进程和系统利用率(内存,CPU,磁盘,网络等),主要用于系统监控,分析和 ...

  8. python 任务管理系统_python bottle框架开发任务管理系统 V_1.0版

    经过1-2个星期的开发,现在开发了个半成品(UI现在比较烂,因为我的前端本来就很差,将就下吧),大概功能如下:用户功能(添加.删除.修改),添加部门功能,任务管理功能(添加.删除.修改,详细).项目管 ...

  9. python解析二维码_Python二维码生成识别实例详解

    前言 在 JavaWeb 开发中,一般使用 Zxing 来生成和识别二维码,但是,Zxing 的识别有点差强人意,不少相对模糊的二维码识别率很低.不过就最新版本的测试来说,识别率有了现显著提高. 对比 ...

最新文章

  1. tf.GradientTape() 示例
  2. RabbitMQ的TTL+死信队列 看完这篇包会!!!
  3. 威驰fs高配和低配有什么区别_“电子手刹”和“机械手刹”的区别有多大?很多车主不清楚...
  4. [置顶] Android开发者官方网站文档 - 国内踏得网镜像
  5. Android之jni编译出现multiple definition of ‘××××ב
  6. day006bootstrap的简单学习 + 轮播图
  7. 重定向程序中的系统输入输出
  8. Xcode5 如何添加一个Github/Repository 并且Checkout
  9. 未解决:configure: error: XCode tool ‘metal‘ neither found in path nor with xcrunchecking for metal...
  10. 核心期刊与统计源期刊
  11. mysql三表联合查询_求三表联合查询的SQL查询语句
  12. cncert阅读报告
  13. 正则表达式中问号(?)的用法详解
  14. 迈向“5G智慧校园”的第一步,启用人脸识别门禁设备
  15. Python动态网页爬虫-----动态网页真实地址破解原理
  16. ai字母组合发音规律_使用和尚ai的俄语字母分类
  17. 关于JS的编码转换问题
  18. 1.4 Go开发工具
  19. 工件的安装与排序问题
  20. OPenGL 内部摄像机(Inside out:Camera)

热门文章

  1. 百度地图API基本使用(一)
  2. 如何用vba做答题、抽点类ppt
  3. Win7下使用VirtualBox虚拟机安装OS X 10.9 Mavericks
  4. 个人经历:谈一谈的程序员求职途径
  5. 风控违约场景如何预测,来看看这份常见的三种模型实现算法对比
  6. 2021年机修钳工(中级)考试题库及机修钳工(中级)试题解析
  7. Android图片压缩尺寸和质量
  8. Golang 错误处理机制详解
  9. PHPStorm 常用设置
  10. 芯片短缺局势依然严峻,供应链上下该如何破局?