【Python 】常用运维模块psutil模块

简介: 本篇内容介绍了“怎么用Python实现查询CPU和内存”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让我带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!运维最头痛的事情莫过于分配的资源少于需求,会遇到 CPU 负载高、队列堵塞、任务运行时间长、超时以及潜在的崩溃隐患等问题。而分配的资源太多,则造成不必要的资源和财力浪费。

本篇内容介绍了“怎么用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-mpipinstallpsutilmacbook:~Aion.Liu$python-mpipinstallpsutilCollectingpsutilDownloadingpsutil-5.9.2-cp310-cp310-macosx_10_9_x86_64.whl (239kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━239.3/239.3kB1.1MB/seta0:00:00Installingcollectedpackages: psutilSuccessfullyinstalledpsutil-5.9.2

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(优先)进程所花费的时间,这个结果因平台不同而不同。
  • 其他返回结果也是因为平台的不同而不同


>>># 引入需要用到的第三方包>>>importpsutil>>>>>>psutil.cpu_count()
12>>>>>>psutil.cpu_count(logical=False)
6>>>>>>psutil.cpu_stats()
scpustats(ctx_switches=322385, interrupts=740666, soft_interrupts=525466977, syscalls=1458128)
>>>>>>psutil.cpu_freq()
scpufreq(current=2600, min=2600, max=2600)
>>>>>>psutil.getloadavg()
(2.9833984375, 2.44775390625, 2.38525390625)
>>>>>>psutil.cpu_times()
scputimes(user=25599.2, nice=0.0, system=13772.39, idle=551135.08)

这里只罗列我需要的几个返回结果,其他返回结果的查询方法或者查询方式,请移步到官方提供的文档中找,这里不在赘述。

2.2 🔥内存-memory

内存方面,在psutil中分为两个方法,一个是实际使用内存(psutil.virtual_memory()),另外一个就是交换内存(psutil.swap_memory())。

  • 实际使用内存(元组形式返回,数据单位为KB,实际上相当于我们在shell中的free或者top命令):psutil.virtual_memory()
  • 交换区内存(元组形式返回,数据单位为KB,实际上相当于我们在shell中的free或者top命令):psutil.swap_memory()
>>>psutil.virtual_memory()
svmem(total=17179869184, available=6904385536, percent=59.8, used=9077141504, free=1129152512, active=5775421440, inactive=5670367232, wired=3301720064)
>>>>>>psutil.swap_memory()
sswap(total=1073741824, used=146538496, free=927203328, percent=13.6, sin=29824843776, sout=240508928)
>>>


2.3 🔥磁盘-disks

磁盘就比较简单些,主要有三个方法:

  • 磁盘分区挂载:psutil.disk_partitions()
  • 磁盘使用情况:psutil.disk_usage(path),path为分区挂载中的路径
  • 磁盘IO统计信息,包括读、写的次数,读、写的字节数等:psutil.disk_io_counters(perdisk=False, nowrap=True)
>>>psutil.disk_partitions(all=False)
[sdiskpart(device='/dev/disk1s5s1', mountpoint='/', fstype='apfs', opts='ro,local,rootfs,dovolfs,journaled,multilabel', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk1s4', mountpoint='/System/Volumes/VM', fstype='apfs', opts='rw,noexec,local,dovolfs,dontbrowse,journaled,multilabel,noatime', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk1s2', mountpoint='/System/Volumes/Preboot', fstype='apfs', opts='rw,local,dovolfs,dontbrowse,journaled,multilabel', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk1s6', mountpoint='/System/Volumes/Update', fstype='apfs', opts='rw,local,dovolfs,dontbrowse,journaled,multilabel', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk1s1', mountpoint='/System/Volumes/Data', fstype='apfs', opts='rw,local,dovolfs,dontbrowse,journaled,multilabel', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk2s1', mountpoint='/Volumes/Tickeys', fstype='hfs', opts='ro,nosuid,quarantine,local,dovolfs,ignore-ownership,multilabel', maxfile=255, maxpath=1024)]
>>>>>>psutil.disk_usage('/dev/disk1s5s1')
sdiskusage(total=194048, used=194048, free=0, percent=100.0)
>>>>>>>>>psutil.disk_io_counters(perdisk=False, nowrap=True)
sdiskio(read_count=3788644, write_count=2529531, read_bytes=74410997248, write_bytes=78161825792, read_time=2925376, write_time=1002444)
>>>


2.4 网络-network

请移步到官方提供的文档中找,这里不在赘述。


2.5 传感器-sensors

请移步到官方提供的文档中找,这里不在赘述。


3 自动化CPU、内存脚本

3.1 创建脚本cpu_memory.py

# coding=gbk#!/usr/bin/pythonimportpsutilimportdatetimeimporttimedeffunc1():
# CPU的逻辑核数cpu_count=psutil.cpu_count()
# cpu的使用率cup_per=psutil.cpu_percent(interval=0.5) # 0.5刷新频率print(f"cpu的逻辑核数为{cpu_count},cpu的平均使用率为{cup_per}")
# 内存信息memory_info=psutil.virtual_memory()
# 总内存memory_total=memory_info.total/1024/1024# 内存使用率#memory_per = (memory_total - memory_info.available) / memory_total * 100memory_per=memory_info.percentprint(f"总内存大小为{memory_total}M,内存的使用率为{memory_per}")
# 硬盘信息disk_info=psutil.disk_usage("/") # 根目录磁盘信息#print(disk_info)# 根目录大小disk_total=disk_info.total# 根目录使用情况disk_per=float(disk_info.used/disk_total*100 )
print(f"根目录大小为{disk_total/1024/1024}M,根目录使用率为{round(disk_per,2)}")
# # 网络使用情况# net = psutil.net_io_counters()# #print(net)# # 网卡配置信息# net_ipy = psutil.net_if_addrs()# #print(f"net_ipy {net_ipy}")# net_ip = net_ipy['ens33'][0][1]# print(f"本机的IP地址为{net_ip}")# # 收取数据# net_recv = float( net.bytes_recv / 1024 /1024)# # 发送数据# net_sent = float(net.bytes_sent /1024 /1024)# print(f"网络收取{round(net_recv,2)}M的数据,发送{round(net_sent,2)}M的数据")# 获取当前系统时间current_time=datetime.datetime.now().strftime("%F %T") # %F年月日 %T时分秒print(f"当前时间是:{current_time}")
time.sleep(1)
start=time.time()
end=time.time()
count=0whileend-start<=10:
count+=1end=time.time()
print(f"执行第{count}次".center(50,'*'))
func1()


3.2 定时执行,写入到文件

将打印日志写入到文件即可完成自动查询日志数据。


参考文章

[1]psutil : https://pypi.org/project/psutil/

[2]pstuil官方文档:https://psutil.readthedocs.io/en/latest/




相关文章
|
1月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
48 4
|
11天前
|
Python
Python Internet 模块
Python Internet 模块。
106 74
|
29天前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
107 63
|
1月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
1月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
1月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
41 5
|
1月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
69 4
|
28天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
28天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
73 1