目录
- 查看消耗内存最多的前40个进程:
- 自动任务做一个基础资源告警脚本
- 利用free工具监控内存利用率,超过80报警并提取出占用内存最高的前十进程。
- 利用df命令监控磁盘利用率,超过80报警。
这篇博客中所写的,在实际工作中并没有什么卵用,工作中并不会用到这种脚本去监控。不过自己写一遍,可以让初学者对cpu、内存、磁盘等一些基础知识和基础命令更加了解。
#!/bin/bash #获取内存情况 mem_total=`free | awk 'nr==2{print $2}'` #获取内存总大小 mem_use=`free | awk 'nr==2{print $3}'` #获取内存使用大小 #统计内存使用率 (使用大小/总大小) mem_use_rate=`awk 'begin{print('$mem_use'/'$mem_total')*100}'| awk '{print int($0)}'` #echo $mem_use_rate ---------- #获取磁盘使用率 disk_use_rate_str=`df -h | grep /dev/vda1 | awk -f '[ %]+' '{print $5}'| awk '{print int($0)}'` #获取cpu使用率 cpu_use_rate=`top -n 1 | grep cpu |awk '{print $2}'| awk '{print int($0)}'` #报警时间 file_log=/home/error.log #提前创建 now_time=`date '+%f %t'` function send_mail(){ } function check(){ if [[ "men_use_rate" > 50 ]] || [[ "disk_use_rate" > 50 ]] || [[ "cpu_use_rate" > 50 ]];then echo "报警时间:"$now_time > $file_log echo "cpu使用率:${cpu_use_rate}% --> 磁盘使用率:${disk_use_rate}% --> 内存使用率:${men_use_rate}%" send_mail fi } function main(){ check } main
注: awk ‘{print int($0)}’
可以将浮点数转为整数 在进行比较大小 shell 不支持浮点直接与整数进行比较
需要用的bc 的计算方式
if [[ “men_use_rate” > 50 ]] 等同于 if [ $men_use_rate > 50 ]
bc 例:
#!/bin/bash var1=20 var2=3.14159 var3=`echo "scale=0;$var2 - $var1 " | bc` echo $var3 var4=`echo "$var1 < $var2"|bc` echo $var4
查看消耗内存最多的前40个进程:
ps auxw|head -1;ps auxw|sort -rn -k4|head -40
自动任务做一个基础资源告警脚本
#!/bin/bash now=`date -u -d"+8 hour" +'%y-%m-%d %h:%m:%s'` #cpu使用阈值 cpu_warn='85' #mem空闲阈值 mem_warn='1000' #disk使用阈值 disk_warn='90' #---cpu item_cpu () { cpu_idle=`top -b -n 1 | grep cpu | awk '{print $8}'|cut -f 1 -d "."` cpu_use=`expr 100 - $cpu_idle` echo "$now 当前cpu使用率为 $cpu_use" >> /tmp/monitoring.log if [ $cpu_use -gt $cpu_warn ] then echo "cpu warning!!!" else echo "cpu ok!!!" fi } #---mem item_mem () { #mb为单位 mem_free=`free -m | grep "mem" | awk '{print $4+$6}'` echo "$now 当前内存剩余空间为 ${mem_free}mb" >> /tmp/monitoring.log if [ $mem_free -lt $mem_warn ] then echo "mem warning!!!" else echo "mem ok!!!" fi } #---disk item_disk () { disk_use=`df -p | grep /dev/vda2 | grep -v -e '(tmp|boot)' | awk '{print $5}' | cut -f 1 -d "%"` echo "$now 当前磁盘使用率为 $disk_use" >> /tmp/monitoring.log if [ $disk_use -gt $disk_warn ] then echo "disk warning!!!" else echo "disk ok!!!" fi } item_cpu item_mem item_disk
利用free工具监控内存利用率,超过80报警并提取出占用内存最高的前十进程。
代码如下:
#!/bin/bash # total=$(free -m | sed -n '2p' | awk '{print $2}') used=$(free -m | sed -n '2p' | awk '{print $3}') free=$(free -m | sed -n '2p' | awk '{print $4}') shared=$(free -m | sed -n '2p' | awk '{print $5}') buff=$(free -m | sed -n '2p' | awk '{print $6}') cached=$(free -m | sed -n '2p' | awk '{print $7}') rate=`echo "scale=2;$used/$total" | bc | awk -f. '{print $2}'` echo -e "total\tused\tfree\tshared\tbuffer\tavailable" echo -e "${total}m\t${used}m\t${free}m\t${shared}m\t${buff}m\t${cached}m\nrate:${rate}%" if [ $rate -ge 80 ] then echo "memory warn" ps aux | grep -v user | sort -rn -k4 | head fi
利用df命令监控磁盘利用率,超过80报警。
df :显示磁盘分区上的可使用的磁盘空间。
-h 以更易读的方式显示;
-p 使用posix的输出格式。
#!/bin/bash # dev=`df -hp | grep '^/dev/*' | cut -d' ' -f1 | sort` for i in $dev do dev=`df -ph | grep $i | awk '{print $1}'` size=`df -ph | grep $i | awk '{print $2}'` used=`df -ph | grep $i | awk '{print $3}'` free=`df -ph | grep $i | awk '{print $4}'` rate=`df -ph | grep $i | awk '{print $5}'` mount=`df -ph | grep $i | awk '{print $6}'` echo -e "$i:\tsize:$size\tused:$used\tfree:$free\trate:$rate\tmount:$mount" f=`echo $rate | awk -f% '{print $1}'` if [ $f -ge 80 ];then echo "$mount warn" else echo "it's ok" fi done
到此这篇关于bash脚本如何监控cup/内存/磁盘使用率的文章就介绍到这了,更多相关bash监控cup/内存/磁盘使用率内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!