本文最后更新于:2024年5月4日 凌晨
方法一
拉起两个进程,执行文件拷贝,输出空文件。可压测到100%,持续执行。
1
| for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
|
方法二
持续计算圆周率,bc命令。可压测到100
1 2
| # 计算小数点后5000位 echo "scale=5000; 4*a(1)" | bc -l -q
|
方法三
编写一个循环,可压测到65%左右,持续执行。
1 2 3 4 5 6 7 8 9
| # 编写一个脚本文件,持续执行该循环,往空文件中写入1。实际不会生成新文件。 # filename=cputest.sh while [ 1 ] do echo 1 >> /dev/null done # 添加执行权限 # 或执行chmod +x cputest.sh chmod 777 cputest.sh
|
方法四
模拟用户不断地访问,并发进程,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # ************常规执行************* # 不会占用过多资源 # !/bin/bash Njob=15 #任务总数 for ((i=0; i<$Njob; i++)); do { echo "progress $i is sleeping for 3 seconds zzz…" sleep 3 } done echo -e "time-consuming: $SECONDS seconds" #显示脚本执行耗时 # ************并发执行************* # !/bin/bash Njob=15 for ((i=0; i<$Njob; i++)); do echo "progress $i is sleeping for 3 seconds zzz…" sleep 3 & #循环内容放到后台执行 done wait #等待循环结束再执行wait后面的内容 echo -e "time-consuming: $SECONDS seconds" #显示脚本执行耗时
|
压测脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #!/bin/bash # 并发运行的最佳实践 # 总进程数 Sp=2500 # 并发数,并发数过大可能造成系统崩溃 Qp=250 # 存放进程的队列 Qarr=(); # 运行进程数 run=0 # 将进程的添加到队列里的函数 function push() { Qarr=(${Qarr[@]} $1) run=${#Qarr[@]} } # 检测队列里的进程是否运行完毕 function check() { oldQ=(${Qarr[@]}) Qarr=() for p in "${oldQ[@]}";do if [[ -d "/proc/$p" ]];then Qarr=(${Qarr[@]} $p) fi done run=${#Qarr[@]} } # main for((i=0; i<$Sp; i++));do #for i in `seq 500000`; do curl -o /dev/null -s -w %{http_code}:%{time_total} http://www.baidu.com ;echo " "; done echo "running $i " sleep 3 & push $! while [[ $run -gt $Qp ]];do check sleep 0.1 done done echo -e "time-consuming: $SECONDS seconds" #显示脚本执行耗时
|