前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[1229]python模块之psutil详解

[1229]python模块之psutil详解

作者头像
周小董
发布2023-10-10 08:42:02
5140
发布2023-10-10 08:42:02
举报
文章被收录于专栏:python前行者

介绍

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等操作系统.

安装

代码语言:javascript
复制
pip install psutil

psutil 使用

1、系统性能信息
1. CPU信息
代码语言:javascript
复制
# 获取CPU的所有信息
print(psutil.cpu_times())
# scputimes(user=36456.328125, system=44368.67187499988, idle=565606.9375, interrupt=1944.65625, dpc=515.34375)

# 获取单项数据信息,如用户user的cpu时间比
print(psutil.cpu_times().user)
# 36785.578125

# 获取cpu逻辑个数,默认logical=True4
print(psutil.cpu_count())
# 16

# 获取cpu物理个数
print(psutil.cpu_count(logical=False))
# 8

# 显示所有逻辑cpu信息
print(psutil.cpu_times(percpu=True))
2. 内存信息

Linux系统的内存利用率信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用psutil.virtual_memory()与psutil.swap_memory()方法获取这些信息

代码语言:javascript
复制
# 获取内存的完整信息
mem = psutil.virtual_memory()

print(mem)
# svmem(total=34220064768, available=20367396864, percent=40.5, used=13852667904, free=20367396864)

# 获取内存的总数
print(mem.total)
# 34220064768

# 获取已使用的内存
print(mem.used)
# 13997309952

# 获取空闲内存大小
print(mem.free)
# 20222754816

# 获取swap分区信息
swap = psutil.swap_memory()
# sswap(total=6871310336, used=8732659712, free=-1861349376, percent=127.1, sin=0, sout=0)
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()获取。

代码语言:javascript
复制
# 获取磁盘的完整信息
print(psutil.disk_partitions())

# 获取磁盘分区的参数情况
print(psutil.disk_usage("c:\\"))

# 获取硬盘总的IO个数
print(psutil.disk_io_counters())

# 获取单个分区IO个数
print(psutil.disk_io_counters(perdisk=True))
4. 网络信息

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

代码语言:javascript
复制
# 获取网络总的IO信息
print(psutil.net_io_counters())

# 获取每个网络接口的IO信息
print(psutil.net_io_counters(pernic=True))

# 获取网络接口信息
print(psutil.net_if_addrs())

# 获取网络接口状态信息
print(psutil.net_if_stats())
5. 其它信息

除了前面介绍的几个获取系统基本信息的方法,psutil模块还支持获取用户登录、开机时间等信息.

代码语言:javascript
复制
# 获取当前登录的用户信息
print(psutil.users())
# [suser(name='Administrator', terminal=None, host=None, started=1653352534.815281, pid=None)]

# 获取当前的开机时间
boot_time_ = psutil.boot_time()  
# 1653352521.2571278
print(datetime.fromtimestamp(boot_time_).strftime("%Y-%m-%d %H:%M:%S"))
# 2022-05-24 08:35:21

psutil还提供了一个test()函数,可以模拟出ps命令的效果。

代码语言:javascript
复制
print(psutil.test())

test()命令只在linux系统下有效,windows下不可以使用。

2、系统进程管理

获得当前系统的进程信息,可以让运维人员得知应用程序的运行状态,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO信息、socket连接、线程数等,这些信息可以呈现出指定进程是否存活、资源利用情况,为开发人员的代码优化、问题定位提供很好的数据参考。

1.进程信息

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

代码语言:javascript
复制
# 列出所有的进程
print(psutil.pids())

# 实例化一个进程对象,参数为进程的ID
p = psutil.Process(11696)

# 获取进程的名称
print(p.name())

# 获取进程的路径
print(p.exe())

# 获取进程的工作路径
print(p.cwd())

# 获取进程的状态
print(p.status())

# 获取进程的创建时间
print(p.create_time())

print(datetime.fromtimestamp(p.create_time()).strftime("%Y-%m-%d %H:%M:%S"))

# 获取进程的用户信息
print(p.username())

# 获取进程的cpu时间信息
print(p.cpu_times())

# 获取cpu的进程亲和度,如果要设置亲和度,可以做为参考
print(p.cpu_affinity())

# 获取进程的cpu利用率
print(p.cpu_percent())

# 获取进程的内存利用率
print(p.memory_percent())

# 获取进程的rss和vms信息
print(p.memory_info())

# 获取进程的IO信息
print(p.io_counters())

# 返回打开进程socket的namedutples列表
print(p.connections())

# 进程开启的线程数
print(p.num_threads())

# 当前进程的父进程ID
print(p.ppid())

# 进程的父进程
print(p.parent())

# 进程打开的文件
print(p.open_files())

# 进程终端
print(p.terminal())  # windows下无此方法
2.popen类的使用

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

代码语言:javascript
复制
import psutil
from subprocess import PIPE

p = psutil.Popen(["python", "-c", "print('Hello World!')"], stdout=PIPE)

print(p.name())

print(p.username())
# ADTEC-DONGHM\Administrator
print(p.communicate())
# (b'Hello World!\r\n', None)

自动化CPU、内存脚本

  • 创建脚本cpu_memory.py
代码语言:javascript
复制
# coding=gbk
#!/usr/bin/python

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()
image.png
image.png

参考:https://blog.csdn.net/haiming0415/article/details/125313441 https://blog.51cto.com/request/5734183 https://www.liaoxuefeng.com/wiki/1016959663602400/1183565811281984

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • psutil 使用
    • 1、系统性能信息
      • 1. CPU信息
      • 2. 内存信息
      • 3. 磁盘信息
      • 4. 网络信息
      • 5. 其它信息
    • 2、系统进程管理
      • 1.进程信息
      • 2.popen类的使用
  • 自动化CPU、内存脚本
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档