# -*- 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("========程式執行結束========")