【深度学习】性能监控

性能监控

判断系统,然后再监控程序运行期间机器的性能

import psutil
import matplotlib.pyplot as plt
import time
import matplotlib
import subprocess
import platform
import os try:import GPUtilimport pynvml
except ImportError as e:print(f"导入GPU模块失败,请先安装GPU驱动:{e}")def is_windows():"""检查当前系统是否为Windows"""return platform.system() == "Windows"def is_linux():"""检查当前系统是否为Linux"""return platform.system() == "Linux"class Linux:"""Linux系统性能监控类"""@staticmethoddef get_cpu_info_linux():"""获取Linux系统的CPU使用率和频率"""cpu_usage = psutil.cpu_percent(interval=1)cpu_freq = psutil.cpu_freq().currentreturn cpu_usage, cpu_freq@staticmethoddef get_memory_info_linux():"""获取Linux系统的内存使用信息"""memory = psutil.virtual_memory()memory_used_gb = memory.used / (1024 ** 3)return memory_used_gb@staticmethoddef get_gpu_info_linux():"""获取Linux系统的GPU信息"""return 0, 0  # 示例值,需要实际实现@staticmethoddef get_cpu_model_unix():"""获取Unix系统的CPU型号"""try:if platform.system() == "Linux":with open('/proc/cpuinfo') as f:for line in f:if line.strip().startswith('model name'):return line.strip().split(':')[1].strip()elif platform.system() == "Darwin":return subprocess.check_output(["sysctl", "-n", "machdep.cpu.brand_string"],universal_newlines=True).strip()except Exception as e:print(f"Error: {e}")return Noneclass run:"""运行性能监控的主类"""def __init__(self):"""初始化run类,创建windows和Linux类的实例"""self.win = windows()self.linux = Linux()# 设置matplotlib以支持中文字符matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 'SimHei'是常用的中文黑体字体matplotlib.rcParams['axes.unicode_minus'] = False    # 用于正确显示负号matplotlib.rcParams['font.size'] = 12                # 调整字体大小def collect_system_data(self, total_duration, interval):"""根据当前系统是Windows还是Linux,收集系统数据"""if is_windows():return self.collect_system_data_windows(total_duration, interval)elif is_linux():return self.collect_system_data_linux(total_duration, interval)else:raise NotImplementedError("Unsupported operating system.")def collect_system_data_windows(self, total_duration, interval):"""在Windows系统上收集系统数据"""start_time = time.time()data = []gpu, gpu_handle = self.win.initialize_gpu_info()while time.time() - start_time < total_duration:cpu_usage, cpu_freq = self.win.get_cpu_info()memory_used_gb = self.win.get_memory_info()gpu_usage, gpu_memory_used = self.win.get_gpu_info(gpu)gpu_temp = self.win.get_gpu_temperature(gpu_handle)data.append((cpu_usage, cpu_freq, memory_used_gb, gpu_usage, gpu_memory_used, gpu_temp))time.sleep(interval)return datadef collect_system_data_linux(self, total_duration, interval):"""在Linux系统上收集系统数据"""start_time = time.time()data = []while time.time() - start_time < total_duration:cpu_usage, cpu_freq = self.linux.get_cpu_info_linux()memory_used_gb = self.linux.get_memory_info_linux()gpu_usage, gpu_memory_used = self.linux.get_gpu_info_linux()data.append((cpu_usage, cpu_freq, memory_used_gb, gpu_usage, gpu_memory_used))time.sleep(interval)def plot_system_data(self, data, cpu_model, gpu_list):"""绘制收集的系统数据并将其保存为PNG文件"""plt.figure(figsize=(14, 12))plt.subplots_adjust(hspace=0.5)titles = ['CPU 使用率 (%)', 'CPU 频率 (MHz)','内存使用量 (GB)', 'GPU 使用率 (%)','GPU 内存使用量 (MB)', 'GPU 温度 (°C)']for i in range(6):plt.subplot(3, 2, i + 1)plt.plot([entry[i] for entry in data], label=titles[i], color=['blue', 'green', 'red', 'purple', 'orange', 'cyan'][i])plt.title(f'{titles[i]}随时间变化')plt.xlabel('时间 (秒)')plt.ylabel(titles[i], rotation=0, labelpad=45)plt.legend()plt.suptitle(f'系统性能监控 \n\n CPU 型号:{cpu_model} \n GPU:{gpu_list[0]} \n 型号:{gpu_list[1]} \n 显存大小:{gpu_list[2]}(MB) \n', fontsize=16)plt.tight_layout()plt.savefig('间段性能图.png')# 显示图形plt.show()current_path = os.getcwd()print("当前工作目录是:", current_path)script_path = os.path.dirname(os.path.abspath(__file__))print("脚本所在目录是:", script_path)print("\n监控图表已保存为 '间段性能图.png'")# 还未调试完成def run_monitor(self, total_duration, interval):"""监控指定时间的系统性能"""cpu_model = self.linux.get_cpu_model_unix()print(cpu_model)gpu_info = self.win.get_gpu_xh_info()gpu_list = []if gpu_info:for gpu in gpu_info:gpu_list.append(gpu['GPU'])gpu_list.append(gpu['型号'])gpu_list.append(gpu['显存大小 (MB)'])else:print("无法获取GPU信息。请确保已安装NVIDIA驱动和nvidia-smi工具。")data = self.collect_system_data(total_duration, interval)self.plot_system_data(data, gpu_list)def run_and_monitor(self, script_path, interval=1):"""运行一个Python脚本并监控其性能"""spitted_test = script_path.split('.')[-1]if spitted_test == 'py': # python脚本process = subprocess.Popen(['python', script_path])elif spitted_test == 'ps1': # PowerShellprocess = subprocess.Popen(["powershell.exe", script_path], stdout=subprocess.PIPE)data = []while True:if process.poll() is not None:break  current_data = self.collect_system_data(1, interval)  if current_data:data.extend(current_data)time.sleep(interval)cpu_model = self.win.get_cpu_model_windows()gpu_info = self.win.get_gpu_xh_info()gpu_list = []if gpu_info:for gpu in gpu_info:gpu_list.append(gpu['GPU'])gpu_list.append(gpu['型号'])gpu_list.append(gpu['显存大小 (MB)'])else:print("无法获取GPU信息。请确保已安装NVIDIA驱动和nvidia-smi工具。")self.plot_system_data(data, cpu_model, gpu_list)class windows:"""Windows系统性能监控类"""def initialize_gpu_info(self):"""初始化并返回使用pynvml和GPUtil的GPU信息"""pynvml.nvmlInit()gpus = GPUtil.getGPUs()if gpus:return gpus[0], pynvml.nvmlDeviceGetHandleByIndex(0)return None, Nonedef get_cpu_info(self):"""获取并返回当前CPU的使用率和频率"""cpu_usage = psutil.cpu_percent(interval=1)cpu_freq = psutil.cpu_freq().currentreturn cpu_usage, cpu_freqdef get_memory_info(self):"""获取并返回以GB为单位的已使用内存量"""memory = psutil.virtual_memory()memory_used_gb = memory.used / (1024 ** 3)return memory_used_gbdef get_gpu_info(self, gpu):"""如果有GPU可用,则返回GPU的使用率和已使用内存"""if gpu:return gpu.load * 100, gpu.memoryUsedreturn 0, 0def get_gpu_temperature(self, handle):"""根据其句柄返回GPU的温度"""if handle:return pynvml.nvmlDeviceGetTemperature(handle, pynvml.NVML_TEMPERATURE_GPU)return 0def get_cpu_model_windows(self):"""获取Windows系统的CPU型号"""try:return subprocess.check_output(["wmic", "cpu", "get", "name"], universal_newlines=True).strip().split('\n')[2]except Exception as e:print(f"Error: {e}")return Nonedef get_gpu_xh_info(self):"""使用nvidia-smi命令获取有关GPU的扩展信息"""try:output = subprocess.check_output(['nvidia-smi', '--query-gpu=name,memory.total', '--format=csv,noheader,nounits'])output = output.decode('utf-8').strip().split('\n')gpu_info = [line.split(',') for line in output]gpu_data = []for idx, (model, memory) in enumerate(gpu_info):gpu_data.append({'GPU': idx + 1,'型号': model,'显存大小 (MB)': int(memory)})return gpu_dataexcept (subprocess.CalledProcessError, FileNotFoundError):return Noneif __name__ == "__main__":print('监控程序运行时的机器性能状态...\n 支持 py 和 ps1')script_path = input('输入程序路径:')jk_start=run()# script_path = 'run.py'print('start...\n')jk_start.run_and_monitor(script_path)print('end\n')print('5秒之后退出')time.sleep(5)

有个问题还没解决

pyinstaller --onefile .\monitor_performance.py

打包成exe执行之后,保存的图片中并没有画出线条

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年12月3日支付宝蚂蚁庄园小课堂今日答案是什么?

问题&#xff1a;雪天行车&#xff0c;路面会有不少前车行驶的轨迹&#xff0c;最好&#xff1f; 答案&#xff1a;顺着前车轨迹行驶 解析&#xff1a;雪天路面湿滑&#xff0c;而且可能有冰雪等堆积物遮盖路面&#xff0c;所以&#xff0c;最好顺着前车轨迹减速慢行&#xf…

Asp.Net Core Web Api内存泄漏问题

背景 使用Asp.Net Core Web Api框架开发网站中使用到了tcp socket通信&#xff0c;网站作为服务端开始tcp server&#xff0c;其他的客户端不断高速给它传输信息时&#xff0c;tcp server中读取信息每次申请的byte[]没有得到及时的释放&#xff0c;导致内存浪费越来越多&#…

frp实现内网穿透(多端口穿透)

frp实现内网穿透 准备一个公网服务器&#xff08;腾讯、阿里、华为的云服务器&#xff09; 下载frp的安装包 下载对应系统的安装包&#xff0c;不要下错文件。 注意amd对应x86架构的系统 arm对应 arm架构系统&#xff08;macos&#xff09; 点击下载 查看文档将对应的安装包放…

设计模式-结构型模式之适配器设计模式

文章目录 一、结构型设计模式二、适配器模式 一、结构型设计模式 这篇文章我们来讲解下结构型设计模式&#xff0c;结构型设计模式&#xff0c;主要处理类或对象的组合关系&#xff0c;为如何设计类以形成更大的结构提供指南。 结构型设计模式包括&#xff1a;适配器模式&…

dockerfile指令学习

进入容器内部有2种方法。 1 docker run -it centos bash 退出后容器会挂了。 2 docker run -d --name my_nginx --restartalways -p 8989:80 nginx docker exec -it my_nginx bash --restartalways表示ngix挂了后会自动重启, -P 随机映射一个端口 dockerfile可以根…

flask 请求勾子实现 request_auth认证

from flask import g,request from comment.utils.tokens_pyjwt import verify_tokensdef jwt_request_auth():从请求(request)中获取token&#xff0c;并且验证token&#xff0c;验证成功之后把用户id保存到全局变量g中g.user_idNone #定义变量#前端代码是是把token携带请求头…

Visual Studio Code之自动补全的设置

步骤&#xff1a;1、打开Visual Studio Code&#xff1b;2、找到c_cpp_properties.json文件&#xff1b;3、将原来文件的内容清空&#xff0c;复制以下内容到此文件中即可&#xff1b; {"configurations": [{"name": "Linux","includePath…

基于Spring、SpringMVC、MyBatis的网上服装销售系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Spring、SpringMVC、MyBatis的网上服…

Unity对接后台和加载图片

1、前言 在unity中与后台对接&#xff0c;用await在web端暂时还不支持&#xff0c;所以&#xff0c;协程成为比较好的通用方式&#xff0c;以下适用除post访问外的所有对接 2、对接后台 2.1、安装插件 首先我们需要用到Newtonsoft.dll&#xff0c;如果没有这个.dll的请跟着我…

C++-火车编组

Description 货运火车要在编组站根据挂常车厢到达目的地重新分组。 如果一列火车有4节车厢&#xff0c;经过编组后&#xff0c;车厢的编组顺序为3,2,4,1,你知道编组站是怎么编组的吗? 小明到编组站参观后发现编组站的铁路有很多岔道&#xff0c;火车在岔道上来来回回地开动…

Linux随记(七)

一、欧拉bclinux 21.10安装zabbix-5.0.37.tar.gz &#xff08;zbx-客户端&#xff09; #系统环境&#xff1a; BigCloud Enterprise Linux For Euler 21.10 LTS #软件信息&#xff1a; zabbix-5.0.37.tar.gz &#xff0c; pcre-devel-8.44-2.oe1.x86_64.rpm &#xff0c; inst…

LED屏幕信息安全如何预防?

随着科技的不断进步&#xff0c;LED屏幕在我们生活和工作中扮演着越来越重要的角色&#xff0c;然而&#xff0c;随之而来的是信息安全面临的挑战。为了有效预防LED屏幕信息的泄露和被盗取&#xff0c;我们需要采取一系列的安全措施。以下是一些建议&#xff1a; 物理安全措施&…

用C++和python混合编写数据采集程序?

之前看过一篇文章&#xff0c;主要阐述的就是多种语言混合编写爬虫程序&#xff0c;结合各种语言自身优势写一个爬虫代码是否行得通&#xff1f;觉得挺有意思的&#xff0c;带着这样的问题&#xff0c;我尝试着利用我毕生所学写了一段C和python混合爬虫程序&#xff0c;目前运行…

对于Windows就是找不到 环境变量 的解决

我认为将“我的电脑”从桌面上隐藏掉纯粹是傻逼行为 说下解决办法&#xff1a; 1. 找到文件资源管理器&#xff0c; 2. 右键点击“此电脑” -- 选择属性&#xff1a; 3. 进入属性界面&#xff0c;应该进入的是“关于”界面&#xff1a;选择“高级系统设置”&#xff1a; 4. 终…

ssm+vue的罪犯信息管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的罪犯信息管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

STM32---MDK工程创建

本节我们带领大家学习如何新建一个寄存器库版本MDK的详细步骤&#xff1b; 由于51单片机的学习时&#xff0c;所涉及的寄存器很少&#xff0c;所以往往几个头文件、驱动文件就可以完成相关的功能&#xff0c;但是对于STM32来讲&#xff0c;涉及的寄存器、头文件等都很多&#…

导入seaborn的数据集方法load_datasets的问题

sns.load_dataset使用报错解决URLError: &#xff1c;urlopen error [Errno 11004] getaddrinfo failed&#xff1e;&#xff08;windows&#xff09;&#xff09; import seaborn as sns import matplotlib.pyplot as plt ​ # 使用Seaborn自带的数据集 tips sns.load_datas…

nodejs使用node-cron实现定时任务功能

ChatGPT国内站点&#xff1a;海鲸AI 在Node.js中&#xff0c;node-cron是一个轻量级的任务调度库&#xff0c;它允许你根据类似于Cron的时间表来安排任务的执行。如果你想要每十分钟执行一次任务&#xff0c;你可以按照以下步骤来设置&#xff1a; 安装node-cron&#xff1a; 如…

Filebeat使用指南

Filebeat介绍主要优势主要功能配置日志的解析Kibana中设置日志解析安装步骤安装Filebeat安装监控通过prometheus监控 Filebeat和Logstash的主要区别 Filebeat介绍 Filebeat是使用Golang实现的轻量型日志采集器&#xff0c;也是Elasticsearch stack的一员。它可以作为一个agent…

Kubernetes 使用插件扩展 kubectl

例子演示 编写 kubectl-foo &#xff0c;拷贝至 /usr/local/bin/ #!/bin/bash# 可选的参数处理 if [[ "$1" "version" ]] thenecho "1.0.0"exit 0 fi# 可选的参数处理 if [[ "$1" "config" ]] thenecho $KUBECONFIGexit…