bash脚本如何监控cup/内存/磁盘使用率

目录
  • 查看消耗内存最多的前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/内存/磁盘使用率内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • linux bash脚本监控启动停止weblogic服务的脚本写法

    有时,linux系统需要做HA或者类似的功能,需要配置weblogic脚本来启动,停止,查看状态,可以如下方式写 命令形式:Weblogic server start|stop|restart|status ### BEGIN WLS Configration DOMAIN_NAME=base_domain SERVER_NAME=AServer ADMIN_URL="t3://ip:7001" DOMAIN_PATH=/Oracle/Middleware/user_projects/

  • 如何利用Bash脚本监控Linux的内存使用情况

    前言 目前市场上有许多开源监控工具可用于监控 Linux 系统的性能.当系统达到指定的阈值限制时,它可以发送电子邮件警报.它可以监视 CPU 利用率.内存利用率.交换利用率.磁盘空间利用率等所有内容. 如果你只有很少的系统并且想要监视它们,那么编写一个小的 shell 脚本可以使你的任务变得非常简单. 在本教程中,我们添加了两个 shell 脚本来监视 Linux 系统上的内存利用率.当系统达到给定阈值时,它将给特定电子邮件地址发邮件. 方法-1:用 Linux Bash 脚本监视内存利用率并发

  • bash脚本如何监控cup/内存/磁盘使用率

    目录 查看消耗内存最多的前40个进程: 自动任务做一个基础资源告警脚本 利用free工具监控内存利用率,超过80报警并提取出占用内存最高的前十进程. 利用df命令监控磁盘利用率,超过80报警. 这篇博客中所写的,在实际工作中并没有什么卵用,工作中并不会用到这种脚本去监控.不过自己写一遍,可以让初学者对CPU.内存.磁盘等一些基础知识和基础命令更加了解. #!/bin/bash #获取内存情况 mem_total=`free | awk 'NR==2{print $2}'` #获取内存总大小 me

  • 一个用了统计CPU 内存 硬盘 使用率的shell脚本

    复制代码 代码如下: #!/bin/bash#This script is use for describle CPU Hard Memery Utilizationtotal=0idle=0system=0user=0nice=0mem=0vmexec=/usr/bin/vmstatwhich sar > /dev/null 2>&1if [ $? -ne 0 ]then  ver=`vmstat -V | awk '{printf $3}'`  nice=0  temp=`vmst

  • Bash 脚本实现每次登录到 Shell 时可以查看 Linux 系统信息

    Linux 中有很多可以查看系统信息如处理器信息.生产商名字.序列号等的命令.你可能需要执行多个命令来收集这些信息.同时,记住所有的命令和他们的选项也是有难度. 你可以写一个 shell 脚本 基于你的需求来自定义显示的信息. 以前我们出于不同的目的需要写很多个 bash 脚本. 现在我们写一个新的 shell 脚本,在每次登录到 shell 时显示需要的系统信息. 这个j脚本有 6 部分,细节如下: 通用系统信息 CPU/内存当前使用情况 硬盘使用率超过 80% 列出系统 WWN 详情 Ora

  • Shell脚本实现监控MySQL主从同步

    代码如下: 复制代码 代码如下: #!/bin/bash #check MySQL_Slave Status #crontab time 00:10 MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}'` MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "

  • Shell脚本实现监控rsync数据是否传输完

    今天有台服务器a要把网站程序全部传输到另外一台服务器b上去,但离下班时间就只有1个小时了,为了准时下班,简单写了个shell脚本来监控是否有传输完,我先在服务器a上看了下网站程序总大小为12G,用du -sm查看也就是11517,服务器也不会有人再传东西上去了,所以我可以放心容量不会再变大了. 系统:centos 5.x 需要的软件:rsync 脚本内容: 复制代码 代码如下: #!/bin/bash file=`du -sm /var/www/vhosts/|awk '{print $1}'`

  • 如何编写健壮的Bash脚本(经验分享)

    shell脚本在运行异常时会受到非常大的影响. 本文介绍一些让bash脚本变得健壮的技术. 使用set -u 因为没有对变量初始化而使脚本崩溃过多少次?对于我来说,很多次.chroot=$1...rm -rf $chroot/usr/share/doc如果上面的代码没有给参数就运行,不会仅仅删除掉chroot中的文档,而是将系统的所有文档都删除.那应该做些什么呢?好在bash提供了set -u,当使用未初始化的变量时,让bash自动退出. 也可以使用可读性更强一点的set -o nounset.

  • php在windows环境下获得cpu内存实时使用率(推荐)

    后台实时监控服务器的CUP与内存占用率的场景很常见,虽然没做过,但是着手写代码之前我真没想到会花2个多小时才最终实现. 网上虽然搜 PHP CUP 内存 使用率 这一类关键字出来的文章一大把,但大都是在Linux环境下,windows下只有提出靠cmd语句实现的观点,但少有实际直接可行的代码,辗转试了一遍 wmic , systeminfo 各种并不熟稔的cmd命令,并没有找到可行的方案,最终通过百度知道 的一篇答案找到利用vbs获取的实现方式,稍加改善,可以在windows环境下直接使用. 类

  • ZABBIX3.2使用python脚本实现监控报表的方法

    如下所示: #!/usr/bin/python #coding:utf-8 import MySQLdb import time,datetime #zabbix数据库信息: zdbhost = '172.16.8.200' zdbuser = 'zabbix' zdbpass = 'zabbix' zdbport = 3306 zdbname = 'zabbix' #生成文件名称: xlsfilename = 'zabbix.xls' #需要查询的key列表 [名称,表名,key值,取值,格式

随机推荐