使用Psutil监控系统资源

使用 Python 的 psutil 库进行系统资源监控 在开发应用程序或进行系统管理时,我们常常需要获取系统的资源使用情况,比如 CPU、内存、磁盘等的利用率。Python 提供了一个非常强大的库 psutil,可以帮助开发者轻松地获取这些信息。本文将介绍 psutil 库的基本使用方法,并展示如何用它来监控系统资源。 阅读详情
# coding=utf-8
from email.mime.text import MIMEText
from email.header import Header
from functools import wraps
import smtplib
import psutil
import time
import json
# 邮件配置
SMTP_SERVER = ''
SMTP_USER = ''
SMTP_PASSWD = ''
RECEIVER_LIST = ['','']
EMAIL_SUBJECT = '服务器检查邮件报警!!!'
EMAIL_TPL = ''
# CPU/MEMORY 报警百分比
CPU_WARN_PERCENT = 70
MEM_WARN_PERCENT = 70
# php-fpm 单线程 报价值(M)
RES_WARN = 128
# 日志文件,%s会替换成日期
TODAY = time.strftime('%Y-%m-%d',time.localtime(time.time()))
LOG_FILE = '/var/log/health_check_%s.log' % TODAY
# 用于显示执行时间的装饰器
def _show_time(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print("start %s ... ..." % func.__name__)
        start_time = time.time()
        func_result = func(*args, **kwargs)
        print("%s 执行时间:%.3fs" % (func.__name__, time.time()-start_time))
        return func_result
    return wrapper
        
# 用于将返回列表整理成字典的装饰器
def _collect_result(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        func_result = func(*args, **kwargs)
        return {func.__name__: {'status': 'OK', 'process_list': []}} if not func_result else {func.__name__: {'status': 'WARN', 'process_list': func_result}}
    return wrapper

@_show_time
@_collect_result
def check_cpu():
    if psutil.cpu_percent(0.01) >= int(CPU_WARN_PERCENT):
        return get_top_process('cpu', 10, True)
    else:
        return []

@_show_time
@_collect_result
def check_mem():
    if psutil.virtual_memory().percent >= int(MEM_WARN_PERCENT):
        return get_top_process('mem', 10, True)
    else:
        return []
        
# 获取mem/cpu占用最高的n个进程
def get_top_process(option='mem',n=10,added=True):
    process_list = []
    for proc in psutil.process_iter():
        process_list.append((proc.name(), proc.memory_percent(), proc.cpu_percent(0.01)))
    process_list.sort(key=lambda process_list:process_list[0]) # 按进程名排序
    if added:
        # 累加相同进程名进程资源占用百分比
        process_list = reduce(
            lambda x,y: x+[y] if x==[] or x[-1][0]!=y[0] else x[0:-1]+[(x[-1][0],x[-1][1]+y[1],x[-1][2]+y[2])],
            [[]] + process_list)
    sort_index = 1 if option.lower() == 'mem' else 2  # 排序列,option=mem,按prcess_list第2列(index=1)排序
    # 将process_list按相应列从大到小排序,无累加-------# todo 先累加再排序
    process_list.sort(key=lambda process_list:process_list[2 if sort_index==1 else 1], reverse=True)
    process_list.sort(key=lambda process_list:process_list[sort_index], reverse=True)
    return process_list[0:n]
@_show_time
@_collect_result
def check_zombie_process():
    zombie_process_list = []
    for proc in psutil.process_iter():
        if proc.status() == 'zombie':
            zombie_process_list.append(
                (proc.name(), proc.status(), proc.create_time(), proc.memory_percent(), proc.cpu_percent(0.01))
                )
    return zombie_process_list
@_show_time
@_collect_result
def check_single_process(process_name='php-fpm'):
    warn_process_list = []
    for proc in psutil.process_iter():
        if proc.name() == process_name:
            if proc.memory_info().res()/1024/1024 >= int(RES_WARN):
                warn_process_list.append(proc.name(), proc.create_time(), proc.memory_info().res(), proc.connections())
        return warn_process_list
@_show_time
def write_log(check_result):
    now= time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    try:
        with open(LOG_FILE,'ab') as f:
            f.writelines(now + '\t' + check_result)
    except IOError:
        print("写日志文件失败!")
@_show_time
def send_mail(subject=EMAIL_SUBJECT, content=EMAIL_TPL):
    mail_body = content
    msg = MIMEText(mail_body, 'html', 'utf-8')
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = SMTP_USER
    msg['To'] = ','.join(RECEIVER_LIST)
    smtp = smtplib.SMTP_SSL()
    smtp.connect(SMTP_SERVER,994)
    smtp.login(SMTP_USER, SMTP_PASSWD)
    for reserver in RECEIVER_LIST:
        smtp.sendmail(SMTP_USER, reserver, msg.as_string())
    smtp.quit()
    print('Email has send out!')
if __name__ == '__main__':
    print("主程序开始")
    start_time = time.time()
    check_result = reduce(
        lambda x,y: dict(x, **y),
        [check_cpu(), check_mem(), check_zombie_process(), check_single_process()]
        )
    for func, func_result in check_result.items():
        if func_result['status'] != 'OK':
            send_mail(func + '报警',json.dumps(func_result))
            break
    write_log(json.dumps(check_result))
    print("总程序执行时间:%.3fs" % (time.time()-start_time))
使用PsUtil实时监控系统状态的Python实现 通过PsUtil库提供的函数和属性,我们可以轻松地获取系统的各种信息,并根据需要进行处理和展示。PsUtil是一个强大的Python库,可以用于获取系统相关的信息,如CPU使用率、内存使用情况、磁盘使用情况等。你可以根据需要扩展以上代码,以监控其他系统状态,如磁盘使用情况、网络连接等。PsUtil库提供了许多其他函数和属性,可以用于获取更多系统信息。运行上述代码,你将看到每秒钟打印一次系统的CPU使用率、内存使用率、已使用内存和总内存容量。的函数,该函数使用一个无限循环来实时监控系统状态。 阅读详情

相关推荐

使用Python的psutil模块监控系统资源

Python的psutil模块提供了一种简单而有效的方式来监控和获取系统资源的信息。本文将介绍如何使用psutil模块来监控系统资源,并提供相应的源代码示例。通过上述示例,你可以看到如何使用psutil模块来监控系统资源。除了上述示例外,psutil还提供了其他方法来获取更多的系统信息,例如获取进程列表、获取网络连接信息等。我们通过字典中的各个字段来获取总内存大小、可用内存大小、已使用内存大小和内存使用率。表示根目录),我们可以获取磁盘的总大小、已使用大小、可用大小和使用率。方法来获取磁盘的使用情况。

CyberNova的博客 161

使用Linux的dstat命令监控系统性能和资源

在Linux系统中,了解系统的性能和资源使用情况对于有效管理和故障排除至关重要。dstat是一个功能丰富的命令行工具,它提供了实时监控和统计系统性能和资源的能力。本文将介绍如何使用dstat命令来监控关键指标并显示实时统计信息和图表。

TyearLin的专栏 1399

使用psutil库监控系统资源的实用指南

psutil是一个跨平台的库,旨在提供系统和进程的相关信息。它可以用于获取CPU、内存、磁盘、网络等资源的使用情况,适用于系统监控、性能分析和资源管理等场景。psutil的设计目标是简单易用,能够在多种操作系统上运行,包括Windows、Linux和macOS。本文介绍了如何使用psutil库监控系统资源,包括CPU、内存、磁盘和网络的使用情况。我们编写了多个函数来获取这些信息,并整合成一个综合监控函数。通过实时监控、

铭渊老黄 164

Python对系统数据进行采集监控——psutil

大家好,我是辰哥~ 今天给大家介绍一个可以获取当前系统信息的库——psutil 利用psutil库可以获取系统的一些信息,如cpu,内存等使用率,从而可以查看当前系统的使用情况,实时采集这些信息可以达到实时监控系统的目的。 psutil库 psutil的安装很简单 pip install psutil psutil库可以获取哪些系统信息? psutil有哪些作用 1.内存使用情况 2.磁盘使用情况 3.cpu使用率 4.网络接口发送接收流量 5.获取当前网速 6.系统当前进程 ... 下面通过具体

公众号:Python研究者 1152

Python系统监控模块psutil功能与经典用法分析

本文实例讲述了Python系统监控模块psutil功能与经典用法。分享给大家供大家参考,具体如下: 1.  psutil模块概述 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等

MSPM0G3507电赛控制板设计:电机驱动与多传感器融合

微控制器是嵌入式控制系统的核心处理单元,其性能与外设集成度直接决定实时控制能力。基于Arm Cortex-M0+内核的MCU凭借低功耗、高性价比和丰富模拟资源,成为大学生电子设计竞赛等工程实践场景的主流选择。本文围绕MSPM0G3507展开,深入解析双路电机驱动(TB6612FNG)、多源传感采集(MPU6050+ADC电压监测)及抗干扰硬件架构等关键技术,强调电源隔离、信号完整性与鲁棒性设计对72小时封闭竞赛环境的关键支撑作用。典型应用涵盖巡线小车运动控制、姿态解算与蓝牙/Zigbee协同通信,为控制类赛

weixin_42588672的博客 543

python 用psutil、pymysql和flask快速打造简易实时网络监控系统

文章目录快速打造简易实时监控系统一、为什么要监控服务器数据二、准备工作1. 获取网卡实时流量信息 - psutil2.存储信息 - mysql (可用mariadb或者mysql)练习:将所有的web日志都 插入到数据库中三、数据展示1.创建数据库表2.获取网卡流量并入库3.web显示4.运行三个脚本,根据提示的ip和端口信息访问页面看效果5.遇到的问题 快速打造简易实时监控系统 一、为什么要监控服务器数据 监控为什么会如此重要? 提前预防故障发生(磁盘、内存、CPU) 发生故障及时了解,并通过历史数据回

wh的博客 3036

告别手动连接!一键搞定Mumu模拟器与Android Studio的ADB配置

本文详细介绍了如何通过编写自动化脚本,一键完成Mumu模拟器与Android Studio的ADB连接配置。告别繁琐的手动命令输入,该脚本能智能检查环境、判断连接状态并自动处理端口转发,显著提升Android开发者的调试与测试效率。

yog99的博客 498

python库(5):Psutil库实现系统和硬件监控工具

psutil(process and system utilities)是一个跨平台库,用于检索运行中进程和系统利用率(包括 CPU、内存、磁盘、网络等)的信息,可以提供丰富的系统监控功能。

u013938578的博客 2244

FPGA优质开源项目 – UDP万兆光纤以太网通信

本文开源一个FPGA项目:UDP万兆光通信。文章末尾有该工程源码获取方式,有需要的小伙伴可以点赞、分享支持一下~

cjx_csdn的博客 4766

小红书高时效推荐系统背后的技术升级

在小红书 APP 中,推荐系统的实效性对推荐效果有着特别重要的影响,特别是作为 UGC 平台,小红书的推荐系统如果能更快地捕捉用户与笔记之间的变化和联系,就能够给推荐带来更好的效果。在2021年上半年,首页推荐的召回、粗排、精排的主要模块都保持在天级更新的状态,我们通过持续迭代,将召回 CF 渠道、召回索引更新、召回模型/粗精排模型的训练都做到了分钟级更新,为首页推荐的分发效率带来飞跃式提升,并给业务侧带来非常显著的收益。 小红书站内“最近一天内发布的新笔记”在首页的曝光占比一直很高,这段时间更是快速

REDtech_1024的博客 3528

如何使用 psutil 监控系统资源

在系统运行中,监控计算机的系统资源(如 CPU 使用率、内存使用情况、磁盘活动等)对于系统优化和故障排查至关重要。`psutil` 是一个非常流行且强大的 Python 库,它提供了一种简便的方式来获取系统的各种资源信息。无论是用于开发应用程序,还是作为系统管理员的工具,`psutil` 都能够帮助我们实时监控和分析系统资源的使用情况。本文介绍如何使用 `psutil` 来监控系统资源,并提供一些实用的示例代码。

1276

BES平台集成第三方音频算法避坑指南:以声加ENC为例,聊聊文件放置、内存分配与授权那些事

本文详细解析了在BES平台上集成声加ENC降噪算法的全流程,包括技术选型、系统架构设计、内存管理及量产授权等关键环节。特别针对BES平台的双核架构和内存限制,提供了文件放置、内存分配与授权验证的实用解决方案,帮助开发者高效实现音频算法集成。

weixin_33720956的博客 514

python 使用psutil模块监控系统资源并告警

思路: 利用python psutil库 获取系统资源 监控告警参考zabbix 异常告警,恢复则通知恢复 利用文本增加时间戳和告警标签 加判断 最新的告警时间在20分钟内则不再重复告警,超20分钟未处理再次告警 定义告警标签,True 为正常状态 和False为告警过的状态 告警后更新监控标签 为False,在False状态和资源低于阈值时则判断为已恢复,并重置文本 代码如下: #!/usr/bin/env python # _*_ coding: utf-8 _*_ import p

Beckham的博客 867

实战ByteTrack:用C++手把手教你实现多目标跟踪(附完整代码解析)

本文通过C++实战教程,手把手教你实现ByteTrack多目标跟踪算法。文章详细解析了算法核心,包括利用卡尔曼滤波进行状态预测、匈牙利算法完成数据关联,以及ByteTrack独特的三次匹配策略来有效处理低置信度检测框,并提供了完整的项目架构、代码实现与性能优化指南。

yolo5detector的博客 299

[网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析

这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了通过Python利用永恒之蓝漏洞加载WannaCry勒索病毒,并实现对Win7文件加密的过程,但过程较为复杂,为什么不直接利用永恒之蓝呢?所以,这篇文章将直接分享MSF利用MS17-010漏洞进行反弹Shell,再上传勒索病毒进行实验复现,并详细讲解WannaCry勒索病毒的原理。基础性文章,希望对您有所帮助。

杨秀璋的专栏 1万+

Python中使用psutil查看内存占用的情况(内存)

【代码】Python中使用psutil查看内存占用的情况(内存)

墨痕诉清风的博客 5020

[毕设项目-大模型微调]现代文翻译文言文【基于LLaMA3.1-8B微调】

教你基于LLaMA3.1-8B微调如何做到现代文翻译文言文

逐梦苍穹的博客 2296

psutil获取系统信息

import psutil print(psutil.cpu_count())# CPU逻辑数量 print(psutil.cpu_count(logical=False))# CPU物理核心 # 2说明是双核超线程, 4则是4核非超线程 统计CPU的用户/系统/空闲时间: import psutil print(psutil.cpu_times()) #再实现类似top命令的CP...

qq_37493425的博客 569

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Python神器:psutil库使用详解

作为一名Python开发者,psutil库无疑是你的必备工具之一!

程序员小杨哥的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Python模块之psutil详解

psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。 ​

m0_72557783的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

psutil模块

psutil import psutil,datetime #cpu print("cpu_times:\t",psutil.cpu_percent(),"\n") #内存 mem = psutil.virtual_memory() print("mem_total:\t",int(mem.total/1024/1024),"MB") print("mem_free:\t",...

weixin_33738555的博客 149

python第三方模块—psutil模块

系统基础信息采集模块作为监控模块的重要组成部分,能够帮助运维人员了解当前系统的健康程度,同时也是衡量业务的服务质量的依据,比如系统资源吃紧,会直接影响业务的服务质量及用户体验,另外获取设备的流量信息,也可以让运维人员更好地评估带宽、设备资源是否应该扩容。运用Python第三方系统基础模块,可以轻松获取服务关键运营指标数据,包括Linux基本性能、块设备、网卡接口、系统...

weixin_34413103的博客 223

Python之psutil库的使用

psutil (python system and process utilities) 是一个跨平台的第三方库,能够轻松实现获取系统运行的进程和系统利用率(包扩CPU、内存、磁盘、网络等)信息。它主要用于系统监控、分析、限制系统资源和进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill...

cpongo55 1359
上一篇: 使用Requests下载图片并使用openpyxl将图片写入Excel中
下一篇: 互联网架构师学习笔记整理
韩志超
博客等级 码龄9年 149粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值