一.系统基础信息模块

1.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.4到3.4的python版本。

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

>>> import psutil
>>> mem=psutil.virtual_memory()
>>> mem.total,mem.used
(506081280L, 224522240L)

  psutil的源码安装步骤为:

  1.下载源码包psutil-*.tar.gz

  2.tar -xf psutil-*.tar.gz

  3.cd psutil-*

  4.python setup.py install

1.1.1 获取系统性能信息

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

  (1)CPU信息

  linux操作系统的CPU利用率有以下几个部分:

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

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

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

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

  使用python的psutil.cpu_times()方法可以非常简单地得到这些信息,同时也可以获取CPU的硬件相关信息,比如CPU的物理个数和逻辑个数,具体如下:

>>> import psutil
>>> psutil.cpu_times()#使用cpu_times方法获取cpu完整信息,需要显示所有逻辑cpu信息
scputimes(user=5.46, nice=0.0, system=14.949999999999999, idle=6876.1300000000001, iowait=32.549999999999997, irq=0.57999999999999996,
softirq=5.7699999999999996, steal=0.0, guest=0.0)
>>> psutil.cpu_times().user #获取用户user的cpu时间比
5.4699999999999998
>>> psutil.cpu_count()  #获取cpu的逻辑个数,默认logical=True4 >>> psutil.cpu_count(logical=False)  #获取cpu的物理个数
>>>

  (2)内存信息

  linux系统的内存利用率信息涉及到的total、used、free、buffers、cache、swap等,分别使用psutil.virtual_memory()与psutil.swap_memory()方法获取这些信息。如下:

>>> import psutil
>>> mem=psutil.virtual_memory() #获取内存完整信息
>>> mem
svmem(total=506081280L, available=426848256L, percent=15.699999999999999, used=224903168L, free=281178112L, active=, inactive=,
buffers=20275200L, cached=)
>>> mem.total  #获取内存总数
506081280L
>>> mem.free  #获取内存空闲数
281178112L
>>> psutil.swap_memory()  #获取swap分区信息
sswap(total=1073733632L, used=0L, free=1073733632L, percent=0.0, sin=, sout=)
>>>

  (3)磁盘信息

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

>>> psutil.disk_partitions()  #获取磁盘完整信息
[sdiskpart(device='/dev/sda3', mountpoint='/', fstype='ext4', opts='rw'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='ext4', opts='rw')
, sdiskpart(device='/dev/sr0', mountpoint='/mnt/cdrom', fstype='iso9660', opts='ro')]
>>> psutil.disk_usage('/')  #获取分区/的使用情况
sdiskusage(total=, used=, free=, percent=3.7000000000000002)
>>> psutil.disk_io_counters()  #获取磁盘总的IO个数、读写信息
sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=)
>>> psutil.disk_io_counters(perdisk=True)  #参数perdisk=Ture获取单个分区IO个数、读写信息
{'sda2': sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=), 'sda3': sdiskio(read_count=,
write_count=, read_bytes=, write_bytes=, read_time=, write_time=), 'sda1': sdiskio(read_count=, write_count=,
read_bytes=, write_bytes=, read_time=, write_time=)}

  (4)网络信息

  系统的网络信息与磁盘IO类似,涉及几个关键点,包括bytes_send(发送字节数)、bytes_recv(接收字节数)、packets_send(发送数据包数)、packets_recv(接收数据包数)等,这些网络信息使用psutil.net_io_counters()方法获取。

>>> psutil.net_io_counters()  #获取网络总的io信息,默认pernic=False
snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=)
>>> psutil.net_io_counters(pernic=True)  #获取每个网络接口的io信息
{'lo': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=),
'eth0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=)}

  (5)其他系统信息

  除以上几个获取系统基本信息的方法,psutil模块还支持获取用户登录数、开机时间信息等

>>> psutil.users()  #返回当前登录系统的用户信息
[suser(name='danny', terminal='pts/0', host='192.168.0.151', started=1516339712.0)]
>>> import psutil,datetime
>>> psutil.boot_time()  #获取开机时间,以linux时间戳格式返回
1516330008.0 >>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")   #转换为自然时间格式
'2018-01-19 10:46:48'

1.1.2  系统进程管理方法

  获取当前系统的进程信息,可以让运维人员得知应用程序的运行状态,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO信息、socket连接、线程数等,这些信息可以呈现出指定进程是否存活、资源利用情况。

  (1)进程信息

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

>>> psutil.pids()  #列出所有进程PID
[, , , , , , , , , , ,... , , , , , , , ]
>>> p=psutil.Process()  #实例化一个Process对象
>>> p.name()  #进程名
'bash'
>>> p.exe()  #进程bin路径
'/bin/bash'
>>> p.cwd()  #进程工作目录绝对路径
'/home/danny'
>>> p.status()  #进程状态
'sleeping'
>>> p.create_time()  #进程创建时间
1516339775.1600001
>>> p.uids()  #进程uid信息
puids(real=, effective=, saved=)
>>> p.gids()  #进程gid信息
pgids(real=, effective=, saved=)
>>> p.cpu_times()  #进程CPU时间信息,包括user、system两个CPU时间
pcputimes(user=0.059999999999999998, system=0.16)
>>> p.cpu_affinity()  #get进程CPU亲和度,如要设置进程CPU亲和度,将CPU号作为参数即可
[]  #该进程可以被CPU0调度
>>> p.memory_percent()  #进程内存利用率
0.27356238112581438
>>> p.memory_info()  #进程内存rss、vms信息
pmem(rss=, vms=)
>>> p.io_counters()  #进程IO信息,包括读写IO数及字节数
pio(read_count=, write_count=, read_bytes=, write_bytes=)
>>> p.connections()  #返回打开进程socket的namedutples列表,包括fs、family、laddr等信息
[]
>>> p.num_threads()  #进程开启的线程数

  (2)popen类的使用

  psutil提供的popen类的作用是获取用户启动的应用程序进程信息,以便跟踪程序进程的运行状态。

>>> from subprocess import PIPE
#通过psutil的Popen方法启动的应用程序,可以跟踪该程序运行的所有相关信息
>>> p=psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout=PIPE)
>>> p.name() #进程的名称
'python'
>>> p.username()  #进程的用户
'root'
>>> p.communicate() 
('hello\n', None)

python自动化运维笔记1 —— 系统性能信息模块psutil的更多相关文章

  1. python自动化运维:系统基础信息模块

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 第一章: 首先介绍下系统性能信息模块:psutil psutil能够轻松实现获取系统 ...

  2. python自动化运维笔记3 —— dns处理模块dnspython

    1.3 DNS处理模块 dnspython是python实现的一个DNS工具包,它支持几乎所有的记录类型,可以用于查询.传输并动态更新ZONE信息,同时支持TSIG(事物签名)验证消息和EDNS0(扩 ...

  3. python自动化运维笔记2 —— IP地址处理模块IPy

    1.2 实用的IP地址处理模块IPy ip地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能.可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括 ...

  4. 【目录】Python自动化运维

    目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...

  5. Day1 老男孩python自动化运维课程学习笔记

    2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...

  6. Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  7. python自动化运维学习第一天--day1

    学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...

  8. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

  9. Python自动化运维的职业发展道路(暂定)

    Python职业发展之路 Python自动化运维工程 Python基础 Linux Shell Fabric Ansible Playbook Zabbix Saltstack Puppet Dock ...

随机推荐

  1. rac添加新节点的步骤与方法(官方步骤与自我测试)

    Extending the Oracle Grid Infrastructure Home to the New NodeNow that the new node has been configur ...

  2. 天融信资料下载官方FTP服务器

    2017年更新:最近发现天融信的FTP服务器变更为了ftp://ftp.topsec.com.cn/,用户名:topsec,密码:topsec2016(不知道后期密码会不会改成topsec2017,如 ...

  3. oracle 12c 12.1.0.2.0 BUG 22562145

    Wed May 23 17:46:14 2018TT01: Standby redo logfile selected for thread 1 sequence 42251 for destinat ...

  4. Ubuntu下更改Python版本

    https://www.jianshu.com/p/9d3033d1b26f 有些命令运行失败,是因为权限不够,前面加上 sudo 首先查看Python默认版本: ubuntu@user~$:pyth ...

  5. 在windows端使用jupyter notebook,服务器充当后台计算云端 简化描述

    在CentOS7服务器端启动jupyter notebook服务,在windows端使用jupyter notebook,服务器充当后台计算云端 简化描述 CentOS7服务器端 jupyter no ...

  6. AGC001E BBQ Hard 组合、递推

    传送门 题意:给出长度为$N$的两个正整数序列$A_i,B_i$,求$\sum\limits_{i=1}^N \sum\limits_{j=i+1}^N C_{A_i+A_j+B_i+B_j}^{A_ ...

  7. 在WPF中使用FontAwesome图标字体

    原文:在WPF中使用FontAwesome图标字体 版权声明:原创内容转载必须注明出处,否则追究相关责任. https://blog.csdn.net/qq_36663276/article/deta ...

  8. 【php增删改查实例】第十一节 - 部门管理模块(编辑功能)

    9. 编辑部门功能的实现 思路:只允许用户勾选一条数据,点击编辑按钮,会跳出一个和新增数据类似的对话框.然后,用户可以修改部门名称和部门编码.点击保存按钮,提示修改成功. 9.1 前台代码编写 < ...

  9. http指南(2)--代理

    代理 单个客户端专用的代理称为私有代理,众多客户端共享的代理被称为公共代理 代理与网关的对比:代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点.网关扮演的是“ ...

  10. 浏览器跨域请求之credentials

    -时间起源- 前段时间,需要弄个简单的网站出来,访问远程的api服务. 我是这么做的.首先是在搭建一个nodejs服务来运行前端页面.在我请求登录的时候,能成功返回相应的成功信息.然后,当我再次请求读 ...