Linux系统硬件老化测试脚本:自动化负载与监控
简介:
这篇文章介绍了一款用于Linux系统的自动化硬件老化测试脚本。该脚本能够通过对CPU、内存、硬盘和GPU进行高强度负载测试,持续运行设定的时长(如1小时),以模拟长时间高负荷运行的环境,从而验证硬件的稳定性与可靠性。脚本还包括了系统资源监控,实时显示CPU温度、频率、内存使用情况等信息,并将测试结果记录到日志文件中。测试完成后,脚本会提供详细的反馈,并允许用户选择是否重新执行测试。通过这种方式,用户可以轻松地评估设备的性能和健康状况。
#!/bin/bash# 请设置老化时长(小时)
set_aging_time=1# 获取脚本绝对路径
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# echo "脚本所在的绝对路径是: ${SCRIPT_DIR}"# 日志存放路径
log_file=${SCRIPT_DIR}/log_file.log
stress_ng=${SCRIPT_DIR}/stress_ng.log# 安装stress-ng、figlet和glmark2-es2工具,当前环境为Ubuntu系统,根据系统替换相关安装命令
install_packages() {if command -v stress-ng > /dev/null 2>&1 && command -v figlet > /dev/null 2>&1 && command -v glmark2-es2 > /dev/null 2>&1; thenecho "All software has been installed."elsesudo apt updatesudo apt install -y stress-ngsudo apt install -y glmark2-es2sudo apt install -y figlet# 检查 stress-ng 是否缺失if ! command -v stress-ng > /dev/null 2>&1; thenecho "stress-ng is not installed"exit 1fi# 检查 figlet 是否缺失if ! command -v figlet > /dev/null 2>&1; thenecho "figlet is not installed"exit 1fi# 检查 glmark2-es2 是否缺失if ! command -v glmark2-es2 > /dev/null 2>&1; thenecho "glmark2-es2 is not installed"exit 1fifi
}# CPU stress test
run_cpu_test() {# 查看cpu信息 lscpustress-ng --cpu $(nproc) --metrics-brief --timeout ${aging_time}s >> ${stress_ng} 2>&1
}# Memory stress test
run_memory_test() {available_memory=$(free -m | grep -E 'Mem|内存' | awk '{print $7}')half_memory=$(echo "$available_memory / $(nproc)" | bc)# 运行内存分配释放模式stress-ng --vm $(nproc) --vm-bytes ${half_memory}M --metrics-brief --timeout ${aging_time}s >> ${stress_ng} 2>&1# 运行内存持续占用模式# stress-ng --vm 1 --vm-bytes ${available_memory}M --metrics-brief --vm-keep --timeout ${aging_time}s >> ${stress_ng} 2>&1
}#HDD stress test
run_disk_stress_test() {stress-ng --hdd $(nproc) -i $(nproc) --metrics-brief --timeout ${aging_time}s >> ${stress_ng} 2>&1
}# GPU stress test
run_gpu_test() {timeout ${aging_time} glmark2-es2 --run-forever --annotate > /dev/null 2>&1
}get_cpu_info() {# 当前 CPU 温度路径cpu_temp_path="/sys/class/thermal/thermal_zone1/temp"cat ${cpu_temp_path} > /dev/null 2>&1if [ $? -eq 0 ]; thencpu_temp=$(echo "scale=1; $(cat ${cpu_temp_path}) / 1000" | bc)elsecpu_temp=" ---"fi# 当前 CPU 频率路径cpu_cur_freq_path="/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq"cat ${cpu_cur_freq_path} > /dev/null 2>&1if [ $? -eq 0 ]; thencpu_cur_freq=$(echo "scale=2; $(cat ${cpu_cur_freq_path}) / 1000" | bc)elsecpu_cur_freq=" --- "fi# 获取当前CPU使用率cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
}get_memory_info() {# 获取总内存、已用内存、缓存memory_info=$(free -m)total_mem=$(echo "$memory_info" | grep -E 'Mem|内存' | awk '{print $2}')used_mem=$(echo "$memory_info" | grep -E 'Mem|内存' | awk '{print $3}')# 计算内存使用百分比(保留一位小数)used_percent=$(echo "scale=1; $used_mem * 100 / $total_mem" | bc)
}run_test() {touch ${SCRIPT_DIR}/start_state.zzecho "Device MAC: $(ip -o link show up | awk '$2 == "eth0:" {print $17}')" >> ${log_file}aging_time=$((set_aging_time * 60 * 60))echo "Aging duration: ${aging_time}S" >> ${log_file}run_cpu_test &run_memory_test &run_disk_stress_test &run_gpu_test &echo "start time: $(date)" >> ${log_file}start_time=$(date +%s)# 清屏clear# 隐藏光标:使用 ANSI 转义序列echo -e "\e[?25l"# 循环直到老化时间结束while true; docurrent_time=$(date +%s) # 获取当前时间elapsed_time=$((current_time - start_time)) # 计算已老化时间# 将已老化时间转换为小时、分钟和秒hours=$((elapsed_time / 3600))minutes=$(( (elapsed_time % 3600) / 60 ))seconds=$((elapsed_time % 60))tput cup 0 0echo -n "Aging time: $(printf "%02d:%02d:%02d" $hours $minutes $seconds) "get_cpu_infotput cup 2 0echo -n "CPU Usage: ${cpu_usage}% | CPU Temp: ${cpu_temp} °C | CPU Cur Freq: ${cpu_cur_freq} MHz "get_memory_infotput cup 4 0echo -n "Total Mem: ${total_mem}M | Used Mem: ${used_mem}M | Mem Usage: ${used_percent}% "# 检查是否已经达到老化时间if [ "$elapsed_time" -ge "$aging_time" ]; thenecho "stop time: $(date)" >> ${log_file}breakfi# 每隔1秒更新一次显示sleep 1done# 等待所有测试完成wait# 显示光标:使用 ANSI 转义序列echo -e "\e[?25h" echo ""printf "Aging test passed, aging duration: %02d:%02d:%02d" $hours $minutes $seconds 2>&1 | tee -a ${log_file}echo ""echo -e "\033[32m$(figlet "PASS")\033[0m"touch ${SCRIPT_DIR}/end_state.zz
}install_packagesstart_state="${SCRIPT_DIR}/start_state.zz"
end_state="${SCRIPT_DIR}/end_state.zz"
if [[ -e "$start_state" ]] && [[ ! -e "$end_state" ]]; thenecho -e "\033[31m$(figlet "FAIL")\033[0m"read -p "Aging test failed, please choose whether to re-execute aging test? (y/n):" answerif [ "$answer" = "Y" ] || [ "$answer" == "y" ]; thenrm -rf ${SCRIPT_DIR}/log_file.logrm -rf ${SCRIPT_DIR}/stress_ng.logrm -rf ${SCRIPT_DIR}/start_state.zzrun_testelseexit 0fielif [[ -e "$start_state" ]] && [[ -e "$end_state" ]]; thenecho -e "\033[32m$(figlet "PASS")\033[0m"read -p "The equipment has completed the aging test and passed. Would you like to re-execute the aging test? (y/n):" answerif [ "$answer" = "Y" ] || [ "$answer" == "y" ]; thenrm -rf ${SCRIPT_DIR}/log_file.logrm -rf ${SCRIPT_DIR}/stress_ng.logrm -rf ${SCRIPT_DIR}/start_state.zzrm -rf ${SCRIPT_DIR}/end_state.zzrun_testelseexit 0fielserun_test
fi
相关文章:
Linux系统硬件老化测试脚本:自动化负载与监控
简介: 这篇文章介绍了一款用于Linux系统的自动化硬件老化测试脚本。该脚本能够通过对CPU、内存、硬盘和GPU进行高强度负载测试,持续运行设定的时长(如1小时),以模拟长时间高负荷运行的环境,从而验证硬件的稳…...
搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档
搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档 本项目采用以下架构: NFS服务器: 负责存储文档资料。Web服务器: 负责提供文档访问和编辑功能。SELinux: 负责权限控制,确保文档安全。Git服务器: 负责存储文档版本历史&#x…...
排序学习整理(1)
1.排序的概念及运用 1.1概念 排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作,以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…...
《深入探究 Java 中的 boolean 类型》
在 Java 编程语言的世界里,boolean 类型虽然看似简单,却在程序的逻辑控制和决策中起着至关重要的作用。本文将带你深入了解 Java 中的 boolean 类型,从其基本概念、用法到实际应用场景,以及一些常见的注意事项。 一、boolean 类型…...
智享 AI 自动无人直播系统:打破地域与时间枷锁中小微企业的营销破局利器
中小微企业,在商业浪潮中恰似逐浪扁舟,常面临营销成本高、推广渠道窄、专业人才缺等 “暗礁”,而智享 AI 自动无人直播系统恰如精准导航的灯塔,助其破浪前行、突出重围。 成本维度,传统直播人力成本让中小微企业望而却…...
接口测试工具:reqable
背景 在众多接口测试工具中挑选出一个比较好用的接口测试工具。使用过很多工具,如Postman、Apifox、ApiPost等,基本上是同类产品,一般主要使用到的功能就是API接口和cURL,其他的功能目前还暂未使用到。 对比 性能方面ÿ…...
同时多平台git配置:GitHub和Gitee生成不同的SSH Key
文章目录 GitHub和Gitee生成不同的SSH Key步骤1:生成SSH Key步骤2:配置SSH配置文件步骤3:查看SSH公钥步骤4:将SSH公钥添加到GitHub和Gitee步骤5:测试SSH连接步骤6:添加remote远程库 GitHub和Gitee生成不同的…...
刷题计划day24 回溯(三)【复原 IP 地址】【子集】【子集 II】
⚡刷题计划day24 回溯(三)继续,回溯一共会有五个专题,敬请期待关注,可以点个免费的赞哦~ 往期可看专栏,关注不迷路, 您的支持是我的最大动力🌹~ 目录 题目一:复原 IP…...
从“找三角形”讲“等腰三角形”
【题目】 周长为11,且各边长均为整数的三角形有哪些? 【答案】 四种,边长分别为: 2 4 5 3 3 5 1 5 5 3 4 4 【解析】 讲解等腰三角形的概念时,传统方法一般向学生展示一个等腰三角形的实物模型,这…...
Java中的泛型方法和泛型类
在Java编程语言中,泛型(Generics)是一个强大的特性,它使得类、接口和方法能够灵活地操作各种数据类型,同时保持类型安全。泛型主要通过类型参数(Type Parameters)来实现,这些类型参数…...
springboot学习-spring-boot-data-jdbc分页/排序/多表查询的例子
上次使用的是JdbcTemplate实现的,是比较老的方式,重新用spring boot data jdbc和jdbc client 实现一遍。也比较一下这几种的编码差异。数据库方面JAVA给了太多选择,反而不好选了。 上次就试图直接用: public interface UserRepo…...
通信与网络基础
1.网络通信基本概念 通信:人、物通过某种介质和行为进行信息传递与交流 网络通信:终端设备之间通过计算机网络进行通信 两个终端通过网线传递文件 多个终端通过路由器传递文件 终端通过Internet下载文件 2.信息传递过程 图1-1 假定A计算机访问B的web…...
【3.存储系统】综合大题
【考点】存储系统综合大题 【2011年408真题】某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16 MB,主存(物理)地址空间大小为1 MB,页面大小为4 KB;Cache采用直接映射方式,共8行;主存与Cache之间交换的…...
【Linux】【字符设备驱动】深入解析
Linux字符设备驱动程序用于控制不支持随机访问的硬件设备,如串行端口、打印机、调制解调器等。这类设备通常以字符流的形式与用户空间程序进行交互。本节将深入探讨字符设备驱动的设计原理、实现细节及其与内核其他组件的交互。 1. 引言 字符设备驱动程序是Linux内…...
【JavaEE】多线程(2)
一、线程安全 1.1 线程安全的概念 线程是随机调度执行的,如果多线程环境下的程序运行的结果符合我们预期则说明线程安全,反之,如果遇到其他结果甚至引起了bug则说明线程不安全 1.2 经典例子与解释 下面举一个经典的线程不安全的例子&…...
mac下Gpt Chrome升级成GptBrowser书签和保存的密码恢复
cd /Users/自己的用户名/Library/Application\ Support/ 目录下有 GPT\ Chrome/ Google/ GptBrowser/ GPT\ Chrome 为原来的chrome浏览器的文件存储目录. GptBrowser 为升级后chrome浏览器存储目录 书签所在的文件 Bookmarks 登录账号Login 相关的文件 拷贝到GptBrow…...
使用Grafana K6来测测你的系统负载能力
背景 近期我们有个号称会有很高很高并发的系统要上线,为了测试一下自己开发的系统的负载能力,准备了点海克斯科技,来看看抗不抗的住。 之前笔者写过用Apache JMeter进行压力测试的文章(传送门👉:https://…...
【论文复现】基于BERT的语义分析实现
📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ WRN: 宽度残差网络 概述语义分类文本分类情感分类 实现原理 核心逻辑pre_deal.pytrain.pytest_demo.py 实现方式&演示效果训练阶段测试阶…...
CTF-RE: STL逆向 [NewStarCTF 2023 公开赛道 STL] WP
多看看STL题就会了,很简单 int __fastcall main(int argc, const char **argv, const char **envp) {__int64 v3; // rbx__int64 v4; // raxchar v5; // bl_BYTE *v6; // rax_QWORD *v7; // rax__int64 v8; // rax__int64 v9; // raxint i; // [rsp0h] [rbp-250h]int j; // [r…...
实习冲刺第三十六天
46.全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: 输入&#…...
【Zemax光学设计实训三】---激光缩束镜的设计优化
前言与目录 技术设计要求: 设计一个激光扩束镜,使用的波长为1064nm,输入光束直径为10mm,输出光束的直径为2mm,且输入光束和输出光束平行(即平行光入射,平行光出射)。要求只使用两片…...
TCP/IP协议簇自学笔记
摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。 曾经,我只知道socket函数能进行网络间数据的通信,知道tcp/ip协议也是用来进行网络数据…...
Spring Boot教程之十一:获取Request 请求 和 Put请求
如何在 Spring Boot 中获取Request Body? Java 语言是所有编程语言中最流行的语言之一。使用 Java 编程语言有几个优点,无论是出于安全目的还是构建大型分发项目。使用 Java 的优点之一是 Java 试图借助类、继承、多态等概念将语言中的每个概念与现实世…...
计算机网络(二)
ip地址:11010010:01011110:00100100:00010100 子网掩码:11111111:11111111:11111111:11000000 and :11010010:01011110:00100100:00000000 210.94.36.0的下一站为R1 因为255为11111111 192为ÿ…...
如何在Python中进行数学建模?
数学建模是数据科学中使用的强大工具,通过数学方程和算法来表示真实世界的系统和现象。Python拥有丰富的库生态系统,为开发和实现数学模型提供了一个很好的平台。本文将指导您完成Python中的数学建模过程,重点关注数据科学中的应用。 数学建…...
JavaSE——类与对象(5)
一、抽象类 1.1为什么需要抽象类 父类的某些方法,不确定怎么实现,也不需要实现。 class Animal{public String name;public Animal(String name){this.name name;}public void eat()//这里实现了也没有意义{System.out.println("这是一个动物&am…...
Istio笔记01--快速体验Istio
Istio笔记01--快速体验Istio 介绍部署与测试部署k8s安装istio测试istio 注意事项说明 介绍 Istio是当前最热门的服务网格产品,已经被广泛应用于各个云厂商和IT互联网公司。企业可以基于Istio轻松构建服务网格,在接入过程中应用代码无需更改,…...
面试小札:Java如何实现并发编程
多线程基础 继承Thread类 定义一个类继承自 Thread 类,重写 run 方法。在 run 方法中编写线程要执行的任务逻辑。例如: java class MyThread extends Thread { Override public void run() { System.out.println("线程执行的任务…...
java-a+b 开启java语法学习
代码 (ab) import java.util.Scanner; //导入 java.util包中的Scanner 类,允许读取键盘输入数据public class Main { // 创建一个公共类 Mainpublic static void main(String[] args) {//程序入口点,main方法Scanner scanner new Scanner(…...
RNN模型文本预处理--数据增强方法
数据增强方法 数据增强是自然语言处理(NLP)中常用的一种技术,通过生成新的训练样本来扩充数据集,从而提高模型的泛化能力和性能。回译数据增强法是一种常见的数据增强方法,特别适用于文本数据。 回译数据增强法 定义…...
药店网站建设相关费用/北京疫情消息1小时前
fork() 是Unix系统创建子进程的唯一方法,其他包或模块的底层都调fork。fork作用是复制克隆一个新进程(子进程),继续同时向下执行。 特点:fork被调用一次,返回两次,一次在父进程中返回子进程PID…...
做食品那些网站/变现流量推广app
#import <Foundation/Foundation.h>/*目录操作*/ void test1(){//文件管理器是专门用于文件管理的类NSFileManager *manager[NSFileManager defaultManager];//获得当前程序所在目录(当然可以改变)NSString *currentPath[manager currentDirectoryPath];NSLog("curr…...
展示型网站设计/游戏推广引流
大家都知道的是算法面试占比高,可现在系统设计面试也避无可避! 有人问:不是SDE2才问系统设计,SDE1只考察OOD吗? 往年也许如此,但今年面试的小伙伴反馈:亚麻分别在三、四轮里出现OOD和系统设计…...
杭州网站建设方案服务公司/移动端seo关键词优化
在开始,我们先来看看这幅漫画的全貌! 这幅漫画是以一个房子的侧方刨面图来绘画的。使用这样的一个房子来代表 Linux 内核。 地基 作为一个房子,最重要的莫过于其地基,在这个图片里,我们也从最下面的地基开始看起&…...
大型的营销型网站建设/旧版优化大师
题目描述: 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。…...
网站开发人员绩效如何计算/网络营销的理解
胡言乱语之gcc优化 本文为业余蒟蒻尝试分析一段简单的 C 代码在 gcc -O0、-O1、-O2 下的优化情况。 ______________ < 大佬驱散!! >--------------\ ^__^\ (oo)\___By___(__)\ CDFMLR )\/\||------||| ||做数值分析的实验,写了…...