的Linux中监控CPU,内存和磁盘状态的外壳脚本。(centos7)
这篇博客中所写的脚本,在实际工作中并没有什么卵用,工作中并不会用到这种脚本去监控。不过自己写一遍,可以让初学者对CPU,内存,磁盘等一些基础知识和基础命令更加了解。
如图1所示,利用的vmstat工具监控CPU详细信息,然后基于的/ proc / STAT计算CPU利用率进行监控,超过80报警并提取出占用CPU最高的前十进程。
vmstat的是Linux的系统监控工具,使用的vmstat命令可以得到关于进程,内存,内存分页,堵塞IO,陷阱及CPU活动的信息。
R:运行队列中的进程数; B:等待IO的进程数。
swpd:已用虚拟内存大小(K);自由:空闲内存大小;浅黄色:已用缓冲大小;缓存:已用缓存大小。
SI:每秒从交换区写入内存的大小(kb / s的);因此:每秒从内存写入交换分区的大小。
BI:每秒读取的块数;博每秒写入的块数。
在:每秒中断数,包括时钟中断; CS:每秒上下文切换数。
us(用户时间):用户进程执行消耗cpu时间; sy(系统时间):系统进程执行消耗cpu时间; id:空闲时间(包括IO等待时间); wa:等待IO时间。
的/ proc / STAT:
这个文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。可以利用其中信息计算CPU的利用率。
每行每个参数的意思为(以第一行为例,单位:jiffies的,1jiffies = 0.01秒):
user(62124):从系统启动开始累计到当前时刻,用户态的CPU时间,不包含nice值为负进程。
尼斯(11):从系统启动开始累计到当前时刻。
系统(47890):从系统启动开始累计到当前时刻,漂亮的值为负的进程所占用的CPU时间。
空闲(8715270):从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间。
IOWAIT(84729):从系统启动开始累计到当前时刻,硬盘IO等待时间。
IRQ(0):从系统启动开始累计到当前时刻,硬中断时间。
软中断(1483):从系统启动开始累计到当前时刻,软中断时间。
CPU时间=用户+很好+系统+空闲+ IOWAIT + IRQ +软中断。
CPU利用率=(IDLE2-IDLE1)/(CPU2-CPU1)* 100。
ps aux:
显示其他用户启动的进程(a)中
查看系统中属于自己的进程(x)的
启动这个进程的用户和启动时间(u)
代码如下:
#!/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')
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`
#echo -e "IDLE2:$IDLE2\nIDLE1:$IDLE1\nCPU2:$CPU2_TOTAL\nCPU1:$CPU1_TOTAL"
#echo -e "IDLE:$IDLE\nCPU:$CPU_TOTAL"
RATE=`echo "scale=4;($CPU_TOTAL-$IDLE)/$CPU_TOTAL*100" | bc | awk '{printf "%.2f",$1}'`
echo -e "us=$CPU_us\tsy=$CPU_sy\tid=$CPU_id\twa=$CPU_wa\tst=$CPU_st"
echo "CPU_RATE:${RATE}%"
CPU_RATE=`echo $RATE | cut -d. -f1`
#echo "CPU_RATE:$CPU_RATE"
if [ $CPU_RATE -ge 80 ]
then echo "CPU Warn"
ps aux | grep -v USER | sort -rn -k3 | head
fi
2,利用免费工具监控内存利用率,超过80报警并提取出占用内存最高的前十进程。
代码如下:
3,利用DF命令监控磁盘利用率,超过80报警。
df:显示磁盘分区上的可使用的磁盘空间。
-h以更易读的方式显示;
-P使用POSIX的输出格式。
CPU物理信息
查看物理CPU个数:
cat / proc / cpuinfo | grep“physical id”| uniq | wc -l
查看CPU核数:
cat / proc / cpuinfo | grep“cpu cores”| uniq的
查看逻辑CPU个数:
cat / proc / cpuinfo | grep“处理器”| wc -l