本节书摘来自华章出版社《python自动化运维:技术与最佳实践》一书中的第1章,第1.1节,作者 (美)neil bergman ,更多章节内容可以访问云栖社区“华章计算机”公众号查看
相比较而言,使用psutil库实现则更加简单明了。psutil大小单位一般都采用字节,如下:
psutil的源码安装步骤如下:
采集系统的基本性能信息包括cpu、内存、磁盘、网络等,可以完整描述当前系统的运行状态及质量。psutil模块已经封装了这些方法,用户可以根据自身的应用场景,调用相应的方法来满足需求,非常简单实用。
(1)cpu信息
linux操作系统的cpu利用率有以下几个部分:
user time,执行用户进程的时间百分比;
system time,执行内核进程和中断的时间百分比;
wait io,由于io等待而使cpu处于idle(空闲)状态的时间百分比;
idle,cpu处于idle状态的时间百分比。
我们使用python的psutil.cpu_times()方法可以非常简单地得到这些信息,同时也可以获取cpu的硬件相关信息,比如cpu的物理个数与逻辑个数,具体见下面的操作例子:
(2)内存信息
linux系统的内存利用率信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用psutil.virtual_memory()与psutil.swap_memory()方法获取这些信息,具体见下面的操作例子:
(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()获取,具体见下面的操作例子:
(4)网络信息
系统的网络信息与磁盘io类似,涉及几个关键点,包括bytes_sent(发送字节数)、bytes_recv=28220119(接收字节数)、packets_sent=200978(发送数据包数)、packets_recv=212672(接收数据包数)等。这些网络信息使用psutil.net_io_counters()方法获取,具体见下面的操作例子:
(5)其他系统信息
除了前面介绍的几个获取系统基本信息的方法,psutil模块还支持获取用户登录、开机时间等信息,具体见下面的操作例子:
获得当前系统的进程信息,可以让运维人员得知应用程序的运行状态,包括进程的启动时间、查看或设置cpu亲和度、内存使用率、io信息、socket连接、线程数等,这些信息可以呈现出指定进程是否存活、资源利用情况,为开发人员的代码优化、问题定位提供很好的数据参考。
(1)进程信息
psutil模块在获取进程信息方面也提供了很好的支持,包括使用psutil.pids()方法获取所有进程pid,使用psutil.process()方法获取单个进程的名称、路径、状态、系统资源利用率等信息,具体见下面的操作例子:
(2)popen类的使用
psutil提供的popen类的作用是获取用户启动的应用程序进程信息,以便跟踪程序进程的运行状态。具体实现方法如下: