CPU及内存压力测试
ubuntu下安装stress
sudo apt update sudo apt install stress stress --version
|
cron定时任务配置
每5分钟执行一次,仅在05-21点之间执行。
*/10 5-21 * * * CRON_RANDOM_DELAY=1 /root/stress/stress.sh >> /var/log/stress_test.log 2>&1
|
stress.sh脚本
#!/bin/bash
# 获取当前时间戳 START_TIME=$(date +"%Y-%m-%d %H:%M:%S") START_SEC=$(date +%s)
echo "=============================================" echo "压力测试开始时间: $START_TIME" echo "---------------------------------------------"
# 检查是否已有实例在运行 if [ -f "$LOCK_FILE" ]; then echo "检测到已有实例正在运行,正在终止其他stress进程..." rm -f "$LOCK_FILE" pkill -9 stress &>/dev/null # 等待确保进程完全终止 sleep 2 fi
# 锁文件路径 LOCK_FILE="/tmp/stress_test.lock" # 创建锁文件 touch "$LOCK_FILE" # 监听-程序异常退出,执行rm -r锁文件 trap 'rm -f "$LOCK_FILE"; exit' EXIT INT TERM
# 如果是通过cron调用,计算并显示随机延迟时间 if [[ -n "$CRON_RANDOM_DELAY" ]]; then RANDOM_DELAY=$((RANDOM % 100)) echo "检测到通过cron调用,随机延迟: $RANDOM_DELAY 秒" sleep $RANDOM_DELAY echo "随机延迟等待完成,继续执行..." echo "---------------------------------------------" fi
# 动态获取系统资源 CPU_CORES=$(nproc) TOTAL_MEM=$(free -m | awk '/Mem:/ {print $2}')
# 设置资源占用参数(可调整比例) CPU_PERCENT=50 # CPU占用百分比 MEM_PERCENT=20 # 内存占用百分比
# 计算实际占用值 STRESS_CPU=$(( CPU_CORES * CPU_PERCENT / 100 )) STRESS_CPU=$(( STRESS_CPU > 0 ? STRESS_CPU : 1 )) STRESS_MEM=$(( TOTAL_MEM * MEM_PERCENT / 100 )) STRESS_MEM="${STRESS_MEM}M" #超时时间,5分钟 STRESS_TIMEOUT="300s"
echo "系统检测结果:" echo " CPU核心数: $CPU_CORES" echo " 总内存: ${TOTAL_MEM}MB" echo "资源占用设置:" echo " CPU占用: $CPU_PERCENT% (使用 $STRESS_CPU 个核心)" echo " 内存占用: $MEM_PERCENT% (分配 $STRESS_MEM)" echo "---------------------------------------------"
# 运行压力测试 echo "开始压力测试..." stress \ --cpu $STRESS_CPU \ --vm 1 \ --vm-bytes $STRESS_MEM \ --timeout $STRESS_TIMEOUT
# 记录结束状态 END_TIME=$(date +"%Y-%m-%d %H:%M:%S") END_SEC=$(date +%s) DURATION=$(( END_SEC - START_SEC ))
echo "---------------------------------------------" echo "压力测试完成!" echo "结束时间: $END_TIME" echo "总运行时长: $DURATION 秒"
echo "============================================="
|
打印stress进程
磁盘空间压力测试
stress也可以临时创建磁盘空间,进程结束后释放。
stress --hdd 2 --hdd-bytes 1G # 创建2个1GB的临时文件
|
dd if=/dev/zero of=testfile bs=1G count=20
|
if=/dev/zero:输入源(无限零字节流)
of=testfile:输出文件名
bs=1M:每次写入 1M (bs=1G:每次写入 1GB)
count=512:总共写入 512 次