总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:Linux运维实战总结
一、模拟CPU使用率
说明:在Linux系统上模拟一个指定的CPU 负载(目标 70%),持续运行30分钟,并且所有负载线程都以最低优先级(nice 19) 运行。
bash
#!/bin/bash
# 设置目标CPU占用率(40%)
TARGET_LOAD=70
# 设置持续时间(120秒)
DURATION=1800
# 获取CPU核心数
CORES=$(nproc)
# 计算需要的线程数
THREADS=$(( CORES * TARGET_LOAD / 100 ))
THREADS=$(( THREADS > 0 ? THREADS : 1 ))
echo "启动 $THREADS 个最低优先级线程模拟 ${TARGET_LOAD}% CPU负载(持续 $DURATION 秒)"
# 工作负载函数(设置为最低优先级)
low_priority_worker() {
# 将当前进程设为最低优先级(nice 19)
renice 19 -p $$ > /dev/null
local end=$((SECONDS + DURATION))
while [ $SECONDS -lt $end ]; do
# 替代方案1:使用内置shell计算(兼容性更好)
# 计算斐波那契数列产生计算负载
a=0; b=1
for i in {1..50000}; do
c=$((a + b))
a=$b
b=$c
done
# 替代方案2:使用awk(如果系统有awk)
# awk 'BEGIN {for(i=0;i<1000000;i++){}}' > /dev/null
# 替代方案3:使用dd和哈希计算
# dd if=/dev/urandom bs=4K count=1000 2>/dev/null | sha1sum > /dev/null
# 适当休眠以控制总体负载比例
sleep 0.2
done
}
# 启动所有工作线程
for i in $(seq 1 $THREADS); do
low_priority_worker &
done
# 等待持续时间结束
sleep $DURATION
# 清理所有后台进程
kill $(jobs -p) 2>/dev/null
wait
echo "任务完成,所有低优先级负载线程已终止"
二、模拟内存使用率
说明:启动一个占用 9GB内存的stress进程,然后持续监控系统的整体内存使用率;当内存使用率首次达到或超过50%时,并不立即终止该进程,而是再等待5分钟(300 秒),随后才强制终止stress进程并退出监控。
bash
#!/bin/bash
# 需要预先安装 stress(如未安装:sudo apt install stress 或 sudo yum install stress)
echo "启动 stress 进程,占用 9GB 内存(放入后台)..."
stress --vm 1 --vm-bytes 9G --vm-keep &
STRESS_PID=$!
echo "stress 进程 PID: $STRESS_PID"
# 监控内存使用率,达到 50% 时自动终止
THRESHOLD=50
INTERVAL=2 # 检查间隔(秒)
echo "开始监控内存使用率,目标阈值: ${THRESHOLD}%"
while true; do
# 获取当前内存使用率(%),保留整数
MEM_PERCENT=$(free | awk '/^Mem/ {printf "%.0f", $3/$2 * 100}')
echo "$(date '+%H:%M:%S') - 当前内存使用率: ${MEM_PERCENT}%"
if [ "$MEM_PERCENT" -ge "$THRESHOLD" ]; then
sleep 300
echo "已达到阈值 ${THRESHOLD}%,正在终止 stress 进程 (PID: $STRESS_PID)..."
kill $STRESS_PID
# 同时清理可能残留的 stress 子进程
pkill -P $STRESS_PID 2>/dev/null
echo "stress 进程已停止。"
break
fi
sleep $INTERVAL
done
echo "监控结束。"
三、模拟磁盘使用率
bash
#!/bin/bash
for i in {1..14}; do
dd if=/dev/zero of="file$i" bs=1G count=10 status=progress
done
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:Linux运维实战总结