利用shell脚本监控linux中CPU利用率。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用shell脚本监控linux中CPU利用率。相关的知识,希望对你有一定的参考价值。

1、利用vmstat工具监控CPU信息。

vmstat 是 Linux系统监控工具,使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。

技术分享图片

r:运行队列中的进程数;b:等待IO的进程数。

swpd:已用虚拟内存大小(k);free:空闲内存大小;buff:已用缓冲大小;cache:已用缓存大小。

si:每秒从交换区写入内存的大小(kb/s);so:每秒从内存写入交换分区的大小。

bi:每秒读取的块数;bo每秒写入的块数。

in:每秒中断数,包括时钟中断;cs:每秒上下文切换数。

us(user time):用户进程执行消耗cpu时间;sy(system time):系统进程执行消耗cpu时间;id:空闲时间(包括IO等待时间);wa:等待IO时间。

代码如下:

#!/bin/bash
#
CPU_us=$(vmstat | awk ‘{print $13}‘ | sed -n ‘$p‘)
CPU_sy=$(vmstat | awk ‘{print $14}‘ | sed -n ‘$p‘)
CPU_id=$(vmstat | awk ‘{print $15}‘ | sed -n ‘$p‘)
CPU_wa=$(vmstat | awk ‘{print $16}‘ | sed -n ‘$p‘)
CPU_st=$(vmstat | awk ‘{print $17}‘ | sed -n ‘$p‘)

echo -e "cpuinfo:\\nus=$CPU_us\\nsy=$CPU_sy\\nid=$CPU_id\\nwa=$CPU_wa\\nst=$CPU_st"

2、基于/proc/stat计算CPU利用率进行监控报警并提取出占用cpu最高的前十进程。

/proc/stat:

    这个文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。可以利用其中信息计算cpu的利用率。

技术分享图片

 

每行每个参数的意思为(以第一行为例,单位:jiffies,1jiffies=0.01秒):

user(214):从系统启动开始累计到当前时刻,用户态的CPU时间,不包含 nice值为负进程。

nice(304):从系统启动开始累计到当前时刻。

system(1906):从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。

idle(1296541):从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间。

iowait(1620):从系统启动开始累计到当前时刻,硬盘IO等待时间。

irq(5):从系统启动开始累计到当前时刻,硬中断时间。

softirq(457):从系统启动开始累计到当前时刻,软中断时间。

CPU时间=user+nice+system+idle+iowait+irq+softirq。

CPU利用率=(idle2-idle1)/(cpu2-cpu1)*100。

 

ps aux:

显示其他用户启动的进程(a)

查看系统中属于自己的进程(x)

启动这个进程的用户和启动时间 (u)

代码如下:

#!/bin/bash
#
CPU1=`cat /proc/stat | grep ‘cpu ‘ | awk ‘{print $2" "$3" "$4" "$5" "$6" "$7" "$8}‘`
sleep 5
CPU2=`cat /proc/stat | grep ‘cpu ‘ | awk ‘{print $2" "$3" "$4" "$5" "$6" "$7" "$8}‘`
IDLE1=`echo $CPU1 | awk ‘{print $4}‘`
IDLE2=`echo $CPU2 | awk ‘{print $4}‘`
CPU1_TOTAL=`echo $CPU1 | awk ‘{print $1+$2+$3+$4+$5+$6+$7}‘`
CPU2_TOTAL=`echo $CPU2 | awk ‘{print $1+$2+$3+$4+$5+$6+$7}‘`
IDLE=`echo "$IDLE2-$IDLE1" | bc`
CPU_TOTAL=`echo "$CPU2_TOTAL-$CPU1_TOTAL" | bc`
RATE=`echo "scale=4;($CPU_TOTAL-$IDLE)/$CPU_TOTAL*100" | bc | awk ‘{printf "%.2f",$1}‘`
echo "CPU_RATE:${RATE}%"
CPU_RATE=`echo $RATE | cut -d. -f1`
if [ $CPU_RATE -ge 80 ]
then echo "CPU Warn"
ps aux | grep -v USER | sort -rn -k3 | head
else echo "It‘s OK"
fi

 

























以上是关于利用shell脚本监控linux中CPU利用率。的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本案例利用top命令精确监控cpu使用率

用 Linux Shell 脚本来监控磁盘使用情况并发送邮件 | Linux 中国

监控CPU内存和硬盘利用率的shell脚本

监控CPU内存和硬盘利用率的shell脚本

监控CPU内存和硬盘利用率的shell脚本

用 Bash 脚本监控 Linux 上的内存使用情况 | Linux 中国