Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1648317
  • 博文数量: 82
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2017-12-09 12:58
文章分类

全部博文(82)

文章存档

2011年(7)

2010年(3)

2009年(11)

2008年(4)

2007年(57)

我的朋友

分类: LINUX

2011-12-09 17:54:05

我狂汗呢, 老大让写个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
 
阅读(3883) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~