一、psutil模块--使用python监控当前系统的CPU、内存、根目录、IP地址等信息

本文详细介绍Python第三方模块psutil,涵盖CPU、内存、磁盘、网络和进程管理等功能,并提供了一个实用的系统监控脚本示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. ## psutil介绍

psutil:process and system utilities

psutil是python中的一个第三方模块,需要下载。它能够轻松的实现获取系统运行的进程和系统利用率(CPU、内存、磁盘、网络等)信息,主要应用于系统监控。实现了同等命令命令行实现的功能:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。能够跨平台运行。

psutil的主要功能包括:CPU、磁盘、内存、网络、进程等。

二.psutil的安装

1.源码安装:git clone https://github.com/giampaolo/psutil.git
cd psutil
python3 setup.py install

2.先安装相关库:yum install python3-devel,(用yum list |grep python|grep dev 找到包名), pip3 install psutil

3.pycharm中导入使用模块:import psutil(可以直接在pycharm中安装)

三.psutil— CPU监控(Linux命令:top)

1.psutil.cpu_count(,[logical]):默认返回逻辑CPU的个数,当设置logical的参数为False时,返回物理CPU的个数

2.psutil.cpu_percent(,[percpu],[interval]):返回CPU的利用率,percpu为True时显示所有物理核心的利用率,interval不为0时,则阻塞时显示interval执行的时间内的平均利用率

3.psutil.cpu_times(,[percpu]):以命名元组(namedtuple)的形式返回cpu的时间花费,percpu=True表示获取每个CPU的时间花费。

user:执行用户进程的时间
system:执行内核进程时间
idle:闲置的时间
iowait:等待io操作的时间
irp:硬中断时间
softirq:软中断时间

4.psutil.cpu_times_percent(,[percpu]):功能和cpu_times大致相同,返回耗时比例

5.psutil.cpu_stats(): 以命名元组的形式返回CPU的统计信息,包括上下文切换,中断,软中断和系统调用次数
ctx_switches:上下文切换次数
interrupts:中断次数
soft_interrupts:软中断次数
syscalls:系统调用次数,linux上始终为0

6.psutil.cpu_freq(): 返回cpu频率

四.psutil— memory内存监控(Linux命令:free)

1.virtual_memory():以命名元组的形式返回内存使用情况,单位为字节
total:总物理内存
available:可用内存,available ~free + buffers + cached
percent:使用率: percent = (total - available) / total * 100
used:使用的内存: used = total - free - buffers - cache
free:完全没用使用内存
active:最近被访问的内存
inactive:长时间未被访问的内存
buffers:缓存
cached:缓存
slab:内核数据结构缓存的内存

2.swap_memory:以命名元组的形式返回swap/memory使用情况,包含swap中页的换入和换出

五.psutil—disk磁盘监控(Linux命令:iostat,df)

1.psutil.disk_io_counters([perdisk]):以命名元组的形式返回磁盘io统计信息(汇总的),包括读、写的次数,读、写的字节数等

2.psutil.disk_partitions():磁盘挂载分区信息
device:分区
mountpoint:挂载点
fstype:文件系统格式(fat、ext4、 xfs)
opts:挂载参数

3.disk_usage:磁盘使用情况,需要传入一个路径参数
>>> psutil.disk_usage(‘/’)
sdiskusage(total=250685575168, used=103938019328, free=134242258944, percent=43.6)

4.iostat : %util 数值越大越忙碌,到达了io瓶颈(安装包:yum install sysstat)

六.psutil— Network网络监控(Linux命令:ifconfig、who、uptime、netstat)

1.psutil.net_io_counters([pernic]):以命名元组的形式返回当前系统中每块网卡的网络io统计信息,包括收发字节数,收发包的数量、出错的情况和删包情况。当pernic为True时,则列出所有网卡的统计信息。

lo :本地回环地址(127.0.0.1)

2.psutil.net_connections([kind]):以列表的形式返回每个网络连接的详细信息(namedtuple)
fd:文件描述符
family:地址簇,ipv4(AF_INET),ipv6
type:SOCK_STREAM(tcp)、udp
laddr:本地ip地址
raddr
status
pid

3.psutil.net_if_addrs():以字典的形式返回网卡的配置信息,包括IP地址和mac地址、子网掩码和广播地址。

4.psutil.net_if_stats():返回网卡的详细信息,包括是否启动、通信类型、传输速度与mtu
mtu:最大传输单元

5.psutil.users():以命名元组的方式返回当前登陆用户的信息,包括用户名,登陆时间,终端

6.psutil.boot_time():以时间戳的形式返回系统的启动时间

七.psutil—进程管理(Linux命令:ps、kill)

1.psutil.pids():以列表的形式返回当前正在运行的进程

2.psutil.pid_exists(1):判断给点定的pid是否存在

3.psutil.Process(1):对进程进行封装,可以使用该类的方法获取进行的详细信息,或者给进程发送信号

4.psutil.process_iter():迭代当前正在运行的进程,返回的是每个进程的Process对象
name:获取进程的名称

cmdline:获取启动进程的命令行参数

create_time:获取进程的创建时间
uids:进程uid信息
num_threads:开启的线程数
exe:进程工作的绝对路径
kill:发送SIGKILL信号结束进程

八.练习:

使用python编写一个监控脚本,放在Linux系统运行。监控的要求如下:

1.显示当前时间

2.脚本运行之后监控10s,每隔一秒钟输出一次信息

3.显示当前系统CPU的逻辑核数、平均使用率

4.显示总内存的大小(单位M),内存的使用率

5.显示根目录的大小(单位M),根目录的使用率

6.本机的IP地址是多少,网络使用情况,收发了多少m的数据

`[root@xieshan python-test]# vim monitor.py 
[root@xieshan python-test]# cat monitor.py 
import psutil
import datetime
import time
def func1():
    # 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 * 100
    memory_per = memory_info.percent
    print(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 = 0
while end - start <= 10:
    count += 1
    end = time.time()
    print(f"执行第{count}次".center(50,'*'))
    func1()
[root@xieshan python-test]# `

参考文章

https://blog.csdn.net/weixin_43880061/article/details/125378213?spm=1001.2014.3001.5502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值