我狂汗呢, 老大让写个shell把CPU和MEM压倒90%,去测试产品自动报警,所以写了一个脚本, 原理很简单,首先生成500并发进程。持续300秒。CPU不到90%就3秒钟再加500个,直到90%停止,然后收集3分钟90%的数据。 看产品前台报警是否生效。 内存更简单了。原理是通过dd 空间至内存。最后塞到90%就OK.持续3分钟收集报警数据。看看脚本吧。希望大家多多指教批评。
1 这个脚本是收集信息脚本,借鉴网上大哥们的方法,因为我是在不知道如何计算CPU使用。
#!/bin/bash
# The script for gather up info with CPU.
trap "echo The end && killall -TERM TEST_INFO.sh" EXIT
echo "===========CPU%==========TIME=========" > /tmp/cpu_info.tmp
while true
do
cat /proc/stat | grep 'cpu' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}' > /tmp/cpuinfo.in
user_a=$(awk '{sum+=$1}END{print sum}' /tmp/cpuinfo.in )
nice_a=$(awk '{sum+=$2}END{print sum}' /tmp/cpuinfo.in )
system_a=$(awk '{sum+=$3}END{print sum}' /tmp/cpuinfo.in )
idle_a=$(awk '{sum+=$4}END{print sum}' /tmp/cpuinfo.in )
iowait_a=$(awk '{sum+=$5}END{print sum}' /tmp/cpuinfo.in )
irq_a=$(awk '{sum+=$6}END{print sum}' /tmp/cpuinfo.in )
softirq_a=$(awk '{sum+=$7}END{print sum}' /tmp/cpuinfo.in )
Total_a=`expr $user_a + $nice_a + $system_a + $idle_a + $iowait_a + $irq_a + $softirq_a`
sleep 1
cat /proc/stat | grep 'cpu' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}' > /tmp/cpuinfo.in
user_b=$(awk '{sum+=$1}END{print sum}' /tmp/cpuinfo.in )
nice_b=$(awk '{sum+=$2}END{print sum}' /tmp/cpuinfo.in )
system_b=$(awk '{sum+=$3}END{print sum}' /tmp/cpuinfo.in )
idle_b=$(awk '{sum+=$4}END{print sum}' /tmp/cpuinfo.in )
iowait_b=$(awk '{sum+=$5}END{print sum}' /tmp/cpuinfo.in )
irq_b=$(awk '{sum+=$6}END{print sum}' /tmp/cpuinfo.in )
softirq_b=$(awk '{sum+=$7}END{print sum}' /tmp/cpuinfo.in )
Total_b=`expr $user_b + $nice_b + $system_b + $idle_b + $iowait_b + $irq_b + $softirq_b`
#rm /tmp/cpuinfo.in
SYS_IDLE=`expr $idle_b - $idle_a`
Total=`expr $Total_b - $Total_a`
SYS_USAGE=`expr $SYS_IDLE/$Total*100 |bc -l`
SYS_Rate=`expr 100-$SYS_USAGE |bc -l`
Disp_SYS_Rate=`expr "scale=3; $SYS_Rate/1" |bc`
echo -e "\t$Disp_SYS_Rate%\t\t`date -R | awk '{print $5}'`"
done > /tmp/cpu_info.tmp
2 这个是测试脚本。
#!/bin/bash
# The script for test cpu with iVCS project.
if [ $UID -ne 0 ]; then
echo "Sorry! Please login with root."
fi
if [ -n ./test.sh ] ; then
./test.sh &
else
echo "Sorry! No found ./test.sh file."
fi
trap "killall -TERM test.sh && killall -TERM TEST_INFO.sh && /usr/bin/clear && echo The script end" EXIT
#trap "/usr/bin/clear && echo The script end" EXIT
#trap "{echo "Oh yeah ! The Program is over ."} && {killall -TERM $0}" EXIT
function CPU_TEST () {
echo -e "The script running.\n"
# fork 1+=100 with time "1+=100"
CPU_INFO () {
TEST_TIME=300
TEST_INIT=0
while [[ $TEST_INIT -le TEST_TIME ]]
do
echo -n "#" > /dev/null
let TEST_INIT=$TEST_INIT+1
sleep 1
done &
}
CPU_INFO
# fork 500
CPU_QUEUE () {
EXEC_INIT=1
EXEC_MAX=500
while [[ $EXEC_INIT -le $EXEC_MAX ]]
do
CPU_INFO
#sleep 1
let EXEC_INIT=$EXEC_INIT+1
done
}
CPU_QUEUE
CPU_GATH () {
CPU_VAR=`cat /tmp/cpu_info.tmp | tail -n 1 | awk '{print $1}' | cut -c 1,2`
while [[ $CPU_VAR -le 90 ]]
do
CPU_VAR=`cat /tmp/cpu_info.tmp | tail -n 1 | awk '{print $1}' | cut -c 1,2`
echo "many deamons."
#CPU_INFO
EXEC_INIT=1
EXEC_MAX=500
while [[ $EXEC_INIT -le $EXEC_MAX ]]
do
CPU_INFO
#sleep 1
let EXEC_INIT=$EXEC_INIT+1
done
if [ $CPU_VAR -ge "90" ]; then
echo -e "OK ! Please view /tmp/cpuinfo.tmp .\n "
fi
sleep 3
done
exit 0
}
CPU_GATH
}
function MEM_TEST () {
MEM_INFO=/proc/meminfo
MEM_TOTAL=$(cat $MEM_INFO | awk '$1 ~/^MemTotal/{print $2}')
MEM_FREE=$(cat $MEM_INFO | awk '$1 ~ /MemFree/ {print $2}')
trap "echo The script the end. && killall -TERM /bin/dd" EXIT
echo -e "Check memory ."
sleep 2
echo -e "The host memory total is $MEM_TOTAL\n"
MEM_F2=$(echo $MEM_TOTAL*0.1 | bc | awk -F "." '{print $1}')
echo "Free memory is $MEM_FREE"
echo "$MEM_F2"
if [[ $MEM_FREE -ge $MEM_F2 ]] ; then
echo -e "=========Mem Free==========Time========="
/bin/dd if=/dev/zero of=/var/lib/ivic/memcache.tmp bs=1024k count=31000 &
while [[ $MEM_FREE -ge $MEM_F2 ]]
do
MEM_FREE=$(cat $MEM_INFO | awk '$1 ~ /MemFree/ {print $2}')
MEM_F2=$(echo $MEM_TOTAL*0.1 | bc | awk -F "." '{print $1}')
echo -e "\t$MEM_FREE\t`date -R | awk '{print $5}'`"
sleep 3
if [[ $MEM_FREE -le $MEM_F2 ]] ;then
echo -e "Memory use 90%\n"
sleep 3 && kill -9 `ps -x | grep 'memcache.tmp' | grep -v "grep" | awk '{print $1}'`
fi
done
fi
}
function TEST_INFO () {
/bin/clear
echo -e "########################### Welcome ###########################\n\n\t\t\tThe script with alert test.\n\n############################# Welcome ##########################\n"
echo -e "A. CPU test.\tB. MEM test.\tC.Disk test \tD. Help\n"
read -p "Please enter key with running script." CHAR
case $CHAR in
[A] | [a] )
CPU_TEST
;;
[B] | [b] )
MEM_TEST
;;
[C] | [c] )
DISK_test
;;
[D] | [d] )
HELP
;;
* )
echo "Sorry ! Enter erorr.Please view help info."
;;
esac
}
TEST_INFO
阅读(3945) | 评论(0) | 转发(0) |