七千二百袋水泥
七千二百袋水泥
发布于 2026-01-21 / 12 阅读

111

stress_test() {

# 默认并发数为1,如果有参数则使用参数

local threads=${1:-1}

local file_size=64

echo "=== 准备启动 $threads 路并发压测 ==="

echo "=== 单路文件大小: ${file_size}MB ==="

# 创建临时目录防止文件乱窜

mkdir -p .stress_tmp

cd .stress_tmp

# 定义清理函数:杀掉后台进程并删库跑路

cleanup() {

echo -e "\n\n[停止] 正在终止 $threads 个并发任务..."

kill $(jobs -p) 2>/dev/null

cd ..

rm -rf .stress_tmp

echo "[完成] 已清理临时文件。"

return

}

trap cleanup SIGINT SIGTERM

# 启动 N 个后台任务

for i in $(seq 1 $threads); do

(

# 1. 先生成一个随机文件(只生成一次,避免 /dev/urandom 成为瓶颈)

dd if=/dev/urandom of=data_$i.bin bs=1M count=$file_size 2>/dev/null

# 2. 死循环:压缩 -> 删源文件 -> 解压(源文件被恢复) -> 删压缩包

while true; do

tar -czf data_$i.tar.gz data_$i.bin

rm -f data_$i.bin

tar -xzf data_$i.tar.gz

rm -f data_$i.tar.gz

done

) &

done

# 监控面板

echo "=== 压测进行中 (Ctrl+C 停止) ==="

echo "时间 | 线程 | CPU负载(1min) | 内存使用"

echo "-----------+------+--------------+---------"

while true; do

# 获取系统负载

load=$(cut -d " " -f 1 /proc/loadavg)

# 获取内存百分比

mem=$(free | grep Mem | awk '{printf "%.1f%%", $3/$2 * 100}')

# 打印状态

printf "%s | %-2d | %-12s | %s\r" "$(date +%H:%M:%S)" "$threads" "$load" "$mem"

sleep 1

done

}