每日一练 no.16 系统监控

版权声明:本文为博主原创文章,如若转载请注明出处 https://blog.csdn.net/tonydz0523/article/details/83960938

问题:

使用python对监控系统的内存、cpu、硬盘、网络状态

解答:

使用 psutil 模块可以对系统进行监控:

cpu信息:

import psutil
# 查看cpu所有信息
psutil.cpu_times()
# 显示cpu所有逻辑信息
psutil.cpu_times(percpu=True)

参数解释:

user :用户时间 被正常的用户进程所占用的时间,在linux下也包括了访客的时间
system :系统时间 在内核中执行的进程占有CPU的时间
其中有些参数在不同的平台下也会有所不同
nice(UNIX):被优先级高的进程所占用的时间
iowait(Linux):等待I/O完成的时间
irq(Linux,BSD):硬件中断维持所花费的时间
softirq(Linux):软件中断维持所花费的时间
dpc(windows):花费在dpc((Deferred Procedure Call),Windows操作系统中的一种中断调用机制)过程中的时间。

# cpu_count()
# 返回逻辑cpu数量
psutil.cpu_count()
# 8

# 可以通过设置logical=False来返回物理CPU的个数
psutil.cpu_count(logical=False)
#4

# cpu_percent() 
# cpu_percent()方法会返回一个浮点值表示当前CPU的利用率,其中有两个参数interval与percpu,interval表示间隔,默认为0.0,输入命令后直接返回,percpu是个bool值,等于Ture的时候输出每个CPU的利用率,此时返回一个列表
psutil.cpu_percent()
# 10.3

psutil.cpu_percent(percpu=True)
# [10.7, 10.9, 10.4, 9.7, 9.8, 9.7, 9.1, 10.1]

内存信息:

# virtual_memory() 
# 用于获取内存的完整信息
psutil.virtual_memory()

# svmem(total=8244162560, available=5031374848, percent=39.0, used=2386759680, free=2985914368, active=3170414592, inactive=1367470080, buffers=462569472, cached=2408919040, shared=507498496)

参数解释:

在系统中内存的利用率信息通常有如下
tatal:物理内存的总数
available:可用内存,表示没有进入交换区的内存,可以直接分配给进程。
used:已经被使用的内存数。
free:空闲内存,指完全没有被使用的内存
cache:缓存的使用数目
buffer:缓冲的使用数目
swap:交换分区使用的数目

# 可以回去具体项
psutil.virtual_memory().percent
# 44.2

# 用于获取交换分区的信息
psutil.swap_memory()
# sswap(total=8192520192, used=0, free=8192520192, percent=0.0, sin=0, sout=0)

磁盘信息:

# 使用psutil类似于于linux下的fdisk命令,我们比较关心的是磁盘的利用率以及I/O信息还有分区信息等等 
# disk_partitions() 获取完整的分区信息(逻辑设备名,挂载点权限,文件系统等等),返回一个元组
psutil.disk_partitions()

# disk_usage() 获取具体目录的磁盘具体的参数
psutil.disk_usage('/home')
# sdiskusage(total=21520543744, used=14603948032, free=5799813120, percent=71.6)

# disk_io_counters() 获取硬盘的I/O个数,返回一个元组
# perdisk参数,当为True时返回每个磁盘的信息,此时返回一个字典
psutil.disk_io_counters()
# sdiskio(read_count=137072, write_count=51659, read_bytes=2088578560, write_bytes=25127633408, read_time=115092, write_time=103628, read_merged_count=8641, write_merged_count=50554, busy_time=53272)

网络信息:

# net_io_counters() 获取网络总I/O信息,pernic为True时返回每个接口信息
psutil.net_io_counters()
# snetio(bytes_sent=17068133, bytes_recv=46263245, packets_sent=25056, packets_recv=51458, errin=0, errout=0, dropin=0, dropout=0)

参数:

bytes_sent: 发出的比特数
bytes_recv: 收到的比特数
packets_sent:发出的包数量
packets_recv: 接受的包数量
errin:接收时出现的错误总数
errout: 发送时出现的错误总数
dropin: 发送过来时丢包的数量
dropout: 发出时丢包的数量

# net_connection() 返回心痛中的套接字的连接信息,以一个列表的形式返回
psutil.net_connections()

用户信息:

# 获取系统用户信息
psutil.users()

开机时间:

# 获取开机时间
psutil.boot_time()
# 时间戳转换为自然时间格式
import datetime
datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H:%M:%S") 

查看系统进程:

# 查看系统全部进程
psutil.pids()

# 查看单个进程
p = psutil.Process(2123)

# 细节
p.name() #进程名
p.exe() #进程的bin路径
p.cwd() #进程的工作目录绝对路径
p.status() #进程状态
p.create_time() #进程创建时间
p.uids() #进程uid信息
p.gids() #进程的gid信息
p.cpu_times() #进程的cpu时间信息,包括user,system两个cpu信息
p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
p.memory_percent() #进程内存利用率
p.memory_info() #进程内存rss,vms信息
p.io_counters() #进程的IO信息,包括读写IO数字及参数
p.connectios() #返回进程列表
p.num_threads() #进程开启的线程数

猜你喜欢

转载自blog.csdn.net/tonydz0523/article/details/83960938