目录
- 查看消耗内存最多的前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 ]];thenecho \"报警时间:\"$now_time > $file_logecho \"cpu使用率:${cpu_use_rate}% --> 磁盘使用率:${disk_use_rate}% --> 内存使用率:${men_use_rate}%\"send_mailfi}function main(){check}main
注: awk \'{print int($0)}\’
可以将浮点数转为整数 在进行比较大小 shell 不支持浮点直接与整数进行比较
需要用的bc 的计算方式
if [[ “men_use_rate” > 50 ]] 等同于 if [ $men_use_rate > 50 ]
bc 例:
#!/bin/bashvar1=20var2=3.14159var3=`echo \"scale=0;$var2 - $var1 \" | bc`echo $var3var4=`echo \"$var1 < $var2\"|bc`echo $var4
查看消耗内存最多的前40个进程:
ps auxw|head -1;ps auxw|sort -rn -k4|head -40
自动任务做一个基础资源告警脚本
#!/bin/bashnow=`date -u -d\"+8 hour\" +\'%Y-%m-%d %H:%M:%S\'`#cpu使用阈值cpu_warn=\'85\'#mem空闲阈值mem_warn=\'1000\'#disk使用阈值disk_warn=\'90\'#---cpuitem_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.logif [ $cpu_use -gt $cpu_warn ]thenecho \"cpu warning!!!\"elseecho \"cpu ok!!!\"fi}#---memitem_mem () {#MB为单位mem_free=`free -m | grep \"Mem\" | awk \'{print $4+$6}\'`echo \"$now 当前内存剩余空间为 ${mem_free}MB\" >> /tmp/monitoring.logif [ $mem_free -lt $mem_warn ]thenecho \"mem warning!!!\"elseecho \"mem ok!!!\"fi}#---diskitem_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.logif [ $disk_use -gt $disk_warn ]thenecho \"disk warning!!!\"elseecho \"disk ok!!!\"fi}item_cpuitem_memitem_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 | headfi
利用df命令监控磁盘利用率,超过80报警。
df :显示磁盘分区上的可使用的磁盘空间。
-h 以更易读的方式显示;
-P 使用POSIX的输出格式。
#!/bin/bash#DEV=`df -hP | grep \'^/dev/*\' | cut -d\' \' -f1 | sort`for I in $DEVdo 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 ];thenecho \"$mount Warn\"else echo \"It\'s OK\"fidone
到此这篇关于bash脚本如何监控cup/内存/磁盘使用率的文章就介绍到这了,更多相关bash监控cup/内存/磁盘使用率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- 如何利用Bash脚本监控Linux的内存使用情况
- linux bash脚本监控启动停止weblogic服务的脚本写法