Linux服务器CPU满负载压力测试&&温度检测
本次测试,测试环境是Centos7.6_X86_64,下载的RPM包是stress-1.0.4-16.el7.x86_64.rpm、lm_sensors-libs-3.4.0-6.20160601.el7.x86_64.rpm以及lm_sensors-3.4.0-6.20160601.el7.x86_64.rpm
下载stress RPM包
- 进入Linux的RPM包网址:RPM Resource
- 搜索框内输入 stress,找到与系统对应的RPM包,点击下载即可
下载lm_sensors RPM包
- 进入Linux的RPM包网址:RPM Resource
- 搜索框内输入 lm_sensors以及lm_sensors-libs,找到与系统对应的RPM包,点击下载即可
安装RPM包
将下载好的RPM包拷贝到/root/目录下,分别执行rpm -ivh 命令安装即可
>>rpm -ivh stress-1.0.4-16.el7.x86_64.rpm
>>rpm -ivh lm_sensors-libs-3.4.0-6.20160601.el7.x86_64.rpm
>>rpm -ivh lm_sensors-3.4.0-6.20160601.el7.x86_64.rpm
编写压力测试的Shell脚本
- 编写压力测试的Shell脚本:cpustress
#!/bin/sh
Value=1
FLAG="fail"
#增加rc.local的权限,在centos7下权限较低
function ProgressBar(){
mark=''
for ((ratio=0;${ratio}<=100;ratio+=5))
do
sleep 0.2
printf "progress:[%-40s]%d%%\r" "${mark}" "${ratio}"
mark="##${mark}"
done
echo
}
#判断系统是否为centos 7,是则修改自启动配置
if [ -f "/etc/redhat-release" ];then
#检查stress命令是否安装
filename_stress="/usr/bin/stress"
if [ -e "$filename_stress" ]; then
#修改/etc/crontab文件
echo "stress has installed!"
else
echo "Err: stress has not installed! Please install the stress-rpm now!"
exit
fi
CPUNUM=`cat /proc/cpuinfo |grep "processor"|wc -l`
#echo "CPUNUM:"$CPUNUM
let RealCPUNUM=$CPUNUM
echo "CPUPROCESSORNUMS(CPU逻辑总数[物理核数X每个物理核的逻辑核数X每个逻辑核的线程数]):"$RealCPUNUM
echo -e "\033[035m*****************************************\033[0m"
echo -e "\033[036m* CPU满负载测试 \033[0m"
echo -e "\033[034m* q : 退出 \033[0m"
echo -e "\033[035m*****************************************\033[0m"
#用户输入选择
input=""
while :
do
read -r -p "*输入测试所需时间(以小时为单位)后回车: " input
if [[ $input =~ ^[0-9]+$ ]]; then
FLAG="OK"
elif [ $input=='q' ]; then
FLAG="QUIT"
else
FLAG="ERR"
fi
case $FLAG in
"OK")
#启动服务
echo "StressTime:"$input"h"
let TimeSecond=$input*60*60
#设置进度条
ProgressBar
stress --cpu $RealCPUNUM --timeout $TimeSecond
break
;;
"QUIT")
echo "quit success!"
break
;;
*)
echo "*请输入有效的数字:"
;;
esac
done
fi
编写记录压力测试日志的Shell脚本
1.编写记录压力测试日志的Shell脚本:watchCPUStatus
#!/bin/sh
Value=1
FLAG="fail"
PrintFLAG=0
#增加rc.local的权限,在centos7下权限较低
function ProgressBar(){
mark=''
for ((ratio=0;${ratio}<=100;ratio+=5))
do
sleep 0.2
printf "progress:[%-40s]%d%%\r" "${mark}" "${ratio}"
mark="##${mark}"
done
echo
}
function print_log2(){
if [ $PrintFLAG -eq 0 ];then
mpstat -P ALL $1 >> "/root/cpu_usage/$str_filename.log" &
PrintFLAG=1
fi
}
#获取时间作为log的文件名
function print_log(){
while :
do
#根据日期时间创建文件名
str_file="CPU_usage"
str_datename=$(date +%Y%m%d)_$(date +%H)
str_filename=$str_file$str_datename
#添加换行符
echo "================== Monitor Message Start ==================" >> "/root/cpu_usage/$str_filename.log" &
sensors >> "/root/cpu_usage/$str_filename.log" &
print_log2 $1
echo >> "/root/cpu_usage/$str_filename.log" &
sleep $1
done
}
#判断系统是否为centos 7,是则修改自启动配置
if [ -f "/etc/redhat-release" ];then
#生成log的文件夹以及文件名
mkdir cpu_usage &
CPUNUM=`cat /proc/cpuinfo | grep physical | sort -n | uniq | wc -l`
#echo "CPUNUM:"$CPUNUM
let RealCPUNUM=$CPUNUM-$Value
echo "RealCPUNUM:"$RealCPUNUM
echo -e "\033[035m*****************************************\033[0m"
echo -e "\033[036m* CPU满负载&&硬件实时监测 \033[0m"
echo -e "\033[034m* q : 退出 \033[0m"
echo -e "\033[035m*****************************************\033[0m"
#用户输入选择
PrintTimeInterval=""
while :
do
read -r -p "*输入打印信息的时间间隔(以秒为单位)后回车: " PrintTimeInterval
if [[ $PrintTimeInterval =~ ^[0-9]+$ ]]; then
FLAG="OK"
elif [ $PrintTimeInterval=='q' ]; then
FLAG="QUIT"
else
FLAG="ERR"
fi
case $FLAG in
"OK")
#启动服务
echo "###PrintTimeInterval:"$PrintTimeInterval"s"
echo "###CPU占用率以及硬件温度信息打印至/root/cpu_usage/下面的log日志,了解详情请前往此目录下查看log文件"
echo "###如需停止相关信息打印,请按Ctrl+C停止即可"
# 打印日志
print_log $PrintTimeInterval
break;
;;
"QUIT")
echo "quit success!"
break
;;
*)
echo "*请输入有效的数字:"
;;
esac
done
fi
2.查看压力测试的信息内容
进入/root/cpu_usage/文件夹下,查看具体的压力信息