記憶體CPU監控

柠柠七發表於2024-03-21
# -*- coding: utf-8 -*-
"""
--------------------------------
Time        : 2024/3/21 11:50
Author      : Ning
Description : 
    xitong_jiankong.py
    系統記憶體、cpu使用情況檢測
--------------------------------
"""
from loguru import logger
import requests, time, os, sys, re, json
import psutil


class xitong_jiankongs():
    def __init__(self):
        pass

    def __del__(self):
        pass

    # 記憶體
    def neicun(self):
        """
        以適於人類可讀方式顯示記憶體資訊。-h與其他命令最大不同是-h選項會在數字後面加上適於人類可讀的單位
        free -h
        """
        mem = psutil.virtual_memory()
        # 系統總計記憶體(單位位元組)
        zj = round(float(mem.total) / 1024 / 1024 / 1024, 2)
        # 系統已經使用記憶體(單位位元組)
        ysy = round(float(mem.used) / 1024 / 1024 / 1024, 2)
        # 系統空閒記憶體(單位位元組)
        kx = round(float(mem.free) / 1024 / 1024 / 1024, 2)
        keyong = round(float(mem.available) / 1024 / 1024 / 1024, 2) # 可用記憶體
        logger.info(f"可用記憶體:{keyong}")
        # 已使用百分比
        yishiyong = mem.percent
        logger.info(f"記憶體大小為:{zj}GB,已使用:{ysy}GB,可用:{kx}GB,已使用:{yishiyong}%")

    # CPU
    def cpu(self):
        """
        # 檢視物理CPU個數
        cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
        # 檢視每個物理CPU中core的個數(即核數)
        cat /proc/cpuinfo| grep "cpu cores"| uniq
        # 檢視邏輯CPU的個數
        cat /proc/cpuinfo| grep "processor"| wc -l
        """
        # 使用psutil.cpu_count()獲取CPU的邏輯處理器個數
        # psutil.cpu_count(logical=False)獲取CPU的物理個數(核心個數)
        cpu_count = psutil.cpu_count()  # 獲取CPU 的邏輯個數,預設logical=True
        logical = psutil.cpu_count(logical=False)  # 獲取CPU 的物理個數
        shiyonglv = psutil.cpu_percent(interval=1) #CPU使用率
        logger.info(f"CPU配置為:{logical}核,{cpu_count}處理器,使用率:{shiyonglv}%")
        return
        cpu_time = psutil.cpu_times()
        logger.debug(cpu_time)
        logger.info(psutil.cpu_times_percent())
        logger.info(psutil.cpu_stats())
        logger.info(psutil.cpu_freq())
        logger.info(psutil.getloadavg())
        p = psutil.cpu_times(percpu=True)  # 使用cpu_times 方法獲取CPU完整資訊,需要顯示所有邏輯CPU資訊,percpu = True可選
        s = psutil.cpu_times().user  # 獲取單項資料資訊,如使用者user 的CPU 時間比
        logger.debug(p)
        logger.debug(s)
        # cpu_percent 以百分比表示當前系統範圍內的CPU使用率
        # 當interval> 0.0時比較間隔前後的系統CPU時間(此時將會處於阻塞)
        # 當interval為0.0或None,比較自上次呼叫或模組匯入以來經過的系統CPU時間(不阻塞)
        # 這意味著第一次呼叫它會返回一個無意義的0.0值,您應該忽略該值 。
        logger.info(psutil.cpu_percent())
        logger.info(psutil.cpu_percent(interval=1))
        logger.info(psutil.cpu_percent(interval=None))
        # 當percpu為True時,返回一個浮點列表,以每個CPU的百分比表示利用率。
        # 列表的第一個元素是指第一個CPU,第二個元素是指第二個CPU,依此類推。列表的順序在各個呼叫之間是一致的。
        logger.info(psutil.cpu_percent(interval=1, percpu=True))
        # 將會以百分比的形式返回當前系統範圍的CPU的利用率。
        logger.info(psutil.cpu_percent(interval=None, percpu=False))



    def main(self):
        self.neicun()
        self.cpu()


xitong_jiankong = xitong_jiankongs()
if __name__ == "__main__":
    xitong_jiankong.main()
    logger.debug("========程式執行結束========")

相關文章