本篇内容介绍了“怎么用Python实现查询CPU和内存”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让我带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
运维最头痛的事情莫过于分配的资源少于需求,会遇到 CPU 负载高、队列堵塞、任务运行时间长、超时以及潜在的崩溃隐患等问题。而分配的资源太多,则造成不必要的资源和财力浪费。
1 psutil介绍和安装
今天给大家介绍的Python库,叫做psutil,直接使用如下命令,安装后使用。在PyPI的官方仓库中,我们可以看到作者以及软件信息,psutil有很多功能,我们先来看下官方提供给我们的信息:
psutil(进程和系统实用程序)是一个跨平台库,用于检索Python中运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。它主要用于系统监视、分析和限制进程资源以及管理正在运行的进程。它实现了经典UNIX命令行工具提供的许多功能,如ps、top、iotop、lsof、netstat、ifconfig、free等。psutil当前支持以下平台:
- Linux
- Windows
- macOS
- FreeBSD, OpenBSD, NetBSD
- Sun Solaris
- AIX
1.1 安装psutil第三方库
通过以下命令进行安装:
python -m pip install psutil
psutil安装很简单,当我们看到Successfully,便知道已经安装成功了。当前执行的命令行,在Windows上面和MacOS上面都已经测试,测试结果可行,下面就以在MacOS上面演示下。
2 psutil在终端命令中使用
本篇章主要介绍CPU和内存,关于磁盘、网络、传感器,会在后续文章中介介绍,大家也可以直接到官方说明中查阅。
2.1 ????CPU
以命名元组的形式返回系统CPU时间。每个属性表示CPU在给定模式下花费的秒数。在psutil中,主要使用到的查询方法有
- 查询CPU逻辑个数:psutil.cpu_count()
- 查询CPU物理个数,默认logical值为True:psutil.cpu_count(logical=False)
- 查询CPU的统计状态信息(元组形式返回):psutil.cpu_stats()
- ctx_switches:上下文切换次数
- interrupts:中断次数
- soft_interrupts:软中断次数
- syscalls:系统调用次数,linux上始终为0
- 查询CPU频率:psutil.cpu_freq()
- 查询CPU各个节点执行时间:psutil.cpu_times()
- user:执行用户进程的时间
- system:执行内核进程时间
- idle:闲置的时间
- nice:在用户模式下执行niced(优先)进程所花费的时间,这个结果因平台不同而不同。
- 其他返回结果也是因为平台的不同而不同
这里只罗列我需要的几个返回结果,其他返回结果的查询方法或者查询方式,请移步到官方提供的文档中找,这里不在赘述。
2.2 ????内存-memory
内存方面,在psutil中分为两个方法,一个是实际使用内存(psutil.virtual_memory()),另外一个就是交换内存(psutil.swap_memory())。
- 实际使用内存(元组形式返回,数据单位为KB,实际上相当于我们在shell中的free或者top命令):psutil.virtual_memory()
- 交换区内存(元组形式返回,数据单位为KB,实际上相当于我们在shell中的free或者top命令):psutil.swap_memory()
2.3 ????磁盘-disks
磁盘就比较简单些,主要有三个方法:
- 磁盘分区挂载:psutil.disk_partitions()
- 磁盘使用情况:psutil.disk_usage(path),path为分区挂载中的路径
- 磁盘IO统计信息,包括读、写的次数,读、写的字节数等:psutil.disk_io_counters(perdisk=False, nowrap=True)
2.4 网络-network
请移步到官方提供的文档中找,这里不在赘述。
2.5 传感器-sensors
请移步到官方提供的文档中找,这里不在赘述。
3 自动化CPU、内存脚本
3.1 创建脚本cpu_memory.py
3.2 定时执行,写入到文件
将打印日志写入到文件即可完成自动查询日志数据。
总结
办法总比问题多,希望自己多思考。
参考文章
[1]psutil : https://pypi.org/project/psutil/
[2]pstuil官方文档:https://psutil.readthedocs.io/en/latest/