mem_cpu

#!/bin/bash


cpu_status_per_second(){

    local CPU_1=$(cat /proc/stat | grep -i ^'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')
    local SYS_IDLE_1=$(echo $CPU_1 | awk '{print $4}')
    local Total_1=$(echo $CPU_1 | awk '{printf "%.f",$1+$2+$3+$4+$5+$6+$7}')

    sleep 1

    local CPU_2=$(cat /proc/stat | grep -i ^'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')
    local SYS_IDLE_2=$(echo $CPU_2 | awk '{print $4}')
    local Total_2=$(echo $CPU_2 | awk '{printf "%.f",$1+$2+$3+$4+$5+$6+$7}')
    local SYS_IDLE=`expr $SYS_IDLE_2 - $SYS_IDLE_1`

    local Total=`expr $Total_2 - $Total_1`
    local Idle=`expr $SYS_IDLE \* 100`
    local SYS_USAGE=`expr $Idle / $Total`
    local SYS_Rate=`expr 100 - $SYS_USAGE`
    echo "******************The CPU USE Rate : $SYS_Rate%******************"

}


#$1 seconds, indicate this case will be end within $1 seconds
cpu_status(){
    #time
    local rp=${1:-10}

    while [ $rp -gt 0 ]
    do
        cpu_status_per_second
        rp=`expr $rp - 1`

    done

}

#             total         used         free       shared      buffers
#Mem:        510964       504816         6148            0       279784
#-/+ buffers:             225032       285932
#Swap:            0            0            0
mem_status_total(){
    #     total  used   free  shared buffers     cached
    #Mem: 510964 504700 6264 0 279460
    local MEM_STAT=`free | grep -i ^mem`  
    #echo $MEM_STAT
    local MEM_USE=`echo $MEM_STAT | awk '{printf "%f", $3/$2*100}'`

    echo "******************The MEMORY TOTAL USE Rate : $MEM_USE%******************"

}

#query /usr/local/bin/xxx process memery status
#$1----- specify app name, e.g. /usr/local/bin
mem_status_pids(){
    local process_name="$1"
    local pid
    local mem_k
    local proccess_info

    for pid in `ps -a | grep "$process_name" | awk '{print $1}'`
    do
        mem_k=`pmap $pid | grep "mapped:" | awk '{print $2}'`
        proccess_info=`ps aux | awk '{ print $2 "\t" $1 "\t" $3 }'|grep "$pid" | sed -n '1p'`

        [ -n "$proccess_info" ] && printf "******The PROCESS %-40s  MEM_USE_RATE: %-10s\n" "$proccess_info" $mem_k  
    done
}

#$1-----specify running times, 10 means running 10 times
mem_cpu_status(){
    local rp=${1:-1000000}
    local pids
    local mem_k
    local proccess_info
    
    echo "$rp, repeat times monitor"

    while [ $rp -gt 0 ]
    do
        mem_status_total
        mem_status_pids "/usr/local/bin/aim"
        #cpu_status_per_second
        sleep 10
        rp=`expr $rp - 1`
    done

    return 0
}

mem_cpu_status $@

posted @ 2012-08-07 15:39  alxe_yu  阅读(260)  评论(0)    收藏  举报