Cpu 监控脚本

116 篇文章 17 订阅
94 篇文章 9 订阅

文章目录


效果:

[root@master /data]#bash bash_cpustat.sh 
cpu0 	 2%
cpu1 	 4%
cpu2 	 1%
cpu3 	 3%
cpu4 	 2%
cpu5 	 3%

[root@master /data]#watch -n 1 bash bash_cpustat.sh
Every 1.0s: bash bash_cpustat.sh                                     Fri Aug  5 15:37:23 2022

cpu0     3%
cpu1     2%
cpu2     1%
cpu3     1%
cpu4     2%
cpu5     2%
......

脚本:

[root@master /data]#cat bash_cpustat.sh
#!/bin/bash
_s=0
_a=0
sleep=1

#Simple output
simple_output(){
for (( i = 0; i < $NPROC; i++ )); do
((pcpu[$i]= 100 * (total_subtracted[$i]-idle_subtracted[$i]) / total_subtracted[$i]))
echo -e cpu$i "\t" ${pcpu[$i]}%
done
}

#All information output
all_output(){
echo -e "CPUID\tuser\tnice\tsystem\tidle\tiowait\tirq\tsoftirq\tsteal\tguest\tguest_nice";
for (( i = 0; i < $NPROC; i++ )); do
((user_p[$i]= 100 * user_subtracted[$i]/total_subtracted[$i]))
((nice_p[$i]= 100 * nice_subtracted[$i]/total_subtracted[$i]))
((idle_p[$i]= 100 * idle_subtracted[$i]/total_subtracted[$i]))
((system_p[$i]= 100 * system_subtracted[$i]/total_subtracted[$i]))
((iowait_p[$i]= 100 * iowait_subtracted[$i]/total_subtracted[$i]))
((irq_p[$i]= 100 * irq_subtracted[$i]/total_subtracted[$i]))
((softirq_p[$i]= 100 * softirq_subtracted[$i]/total_subtracted[$i]))
((steal_p[$i]= 100 * steal_subtracted[$i]/total_subtracted[$i]))
((guest_p[$i]= 100 * guest_subtracted[$i]/total_subtracted[$i]))
((guest_nice_p[$i]= 100 * guest_nice_subtracted[$i]/total_subtracted[$i]))
echo -e cpu$i"\t"${user_p[$i]}"\t"${nice_p[$i]}"\t"${system_p[$i]}"\t"${idle_p[$i]}"\t"${iowait_p[$i]}"\t"${irq_p[$i]}"\t"${softirq_p[$i]}"\t"${steal_p[$i]}"\t"${guest_p[$i]}"\t"${guest_nice_p[$i]}
done
}

#Information for help
do_help() {
   cat <<EOF
A very simple cpu usage percentages monitor tools .Simply calculate and output cpu usage percentages in text .Two versions coding by shell and php .
Usage $0 [-a|-s|-h]
Options
  -s: Print simple cpu usages(default)
  -a: Print all kinds of works of cpu usages
  -h: Print this messsage
For more information , please refer to : https://github.com/catscarlet/cpustat
EOF
}

#Error message
do_error() {
    do_help 1>2
    exit 1
}

#Here start the cpustat
while getopts "ash" op; do
    case "$op" in
        s)  _s=1
            ;;
        a)  _a=1
            ;;
        h) do_help
            exit
            ;;
        *) do_help
            exit
            ;;
    esac
done



NPROC=(`nproc`)
for (( i = 0; i < $NPROC; i++ )); do
((sedline=i+2))
procstat_t1=(`cat /proc/stat | grep '^cpu' |sed -n "$sedline,$sedline p"`)
user_t1[$i]=${procstat_t1[1]}
nice_t1[$i]=${procstat_t1[2]}
system_t1[$i]=${procstat_t1[3]}
idle_t1[$i]=${procstat_t1[4]}
iowait_t1[$i]=${procstat_t1[5]}
irq_t1[$i]=${procstat_t1[6]}
softirq_t1[$i]=${procstat_t1[7]}
steal_t1[$i]=${procstat_t1[8]}
guest_t1[$i]=${procstat_t1[9]}
guest_nice_t1[$i]=${procstat_t1[10]}
((total_t1[$i]=user_t1[$i]+nice_t1[$i]+system_t1[$i]+idle_t1[$i]+iowait_t1[$i]+irq_t1[$i]+softirq_t1[$i]+steal_t1[$i]+guest_t1[$i]+guest_nice))
done

sleep $sleep

for (( i = 0; i < $NPROC; i++ )); do
((sedline=i+2))
procstat_t2=(`cat /proc/stat | grep '^cpu' |sed -n "$sedline,$sedline p"`)
user_t2[$i]=${procstat_t2[1]}
nice_t2[$i]=${procstat_t2[2]}
system_t2[$i]=${procstat_t2[3]}
idle_t2[$i]=${procstat_t2[4]}
iowait_t2[$i]=${procstat_t2[5]}
irq_t2[$i]=${procstat_t2[6]}
softirq_t2[$i]=${procstat_t2[7]}
steal_t2[$i]=${procstat_t2[8]}
guest_t2[$i]=${procstat_t2[9]}
guest_nice_t2[$i]=${procstat_t2[10]}
((total_t2[$i]=user_t2[$i]+nice_t2[$i]+system_t2[$i]+idle_t2[$i]+iowait_t2[$i]+irq_t2[$i]+softirq_t2[$i]+steal_t2[$i]+guest_t2[$i]+guest_nice))
done

for (( i = 0; i < $NPROC; i++ )); do
((user_subtracted[$i]=user_t2[$i]-user_t1[$i]))
((nice_subtracted[$i]=nice_t2[$i]-nice_t1[$i]))
((idle_subtracted[$i]=idle_t2[$i]-idle_t1[$i]))
((system_subtracted[$i]=system_t2[$i]-system_t1[$i]))
((iowait_subtracted[$i]=iowait_t2[$i]-iowait_t1[$i]))
((irq_subtracted[$i]=irq_t2[$i]-irq_t1[$i]))
((softirq_subtracted[$i]=softirq_t2[$i]-softirq_t1[$i]))
((steal_subtracted[$i]=steal_t2[$i]-steal_t1[$i]))
((guest_subtracted[$i]=guest_t2[$i]-guest_t1[$i]))
((guest_nice_subtracted[$i]=guest_nice_t2[$i]-guest_nice_t1[$i]))
((total_subtracted[$i]= total_t2[$i]-total_t1[$i]))
done

[ "$1" = "" ] && _s=1

if [ $_s = 1 ]; then
    simple_output
fi

if [ $_a = 1 ]; then
    all_output
fi

参考:
https://github.com/catscarlet/cpustat/blob/master/bash_cpustat.sh


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值