• shell脚本检测监控mysql的CPU占用率


     网站访问量大的时候mysql的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法 就是重启mysql服务。由于这种事具有不可预见性,我们不知道什么时候mysql的占用率达到300%,还是写个程序定期判断比较靠谱。

            学了shell编程,写了下面的脚本:

    #!/bin/bash
    cpu=`ps aux | grep 'mysqld$' | cut -d " " -f6 | cut -d. -f1`
    if [ $cpu -gt 300 ]
    then
        service mysql restart && date >> /tmp/mysql.log
    fi

           稍微解释一下。首先执行"ps aux"命令获取所有系统进程的状态信息,包括CPU,内存等,如下图:

    然后通过管道将信息传送给grep,$就是正则表达式结尾的意思,从所有的进程中找到以“mysqld”结尾的进程,其实就是mysql啦,这里返回的是mysql进程的信息,一行,如下图:

          接下来的一个cut是截断字符串,我们要统计的是CPU的占用率,当然要截取mysql的CPU数值,cut命令默认是用tab分割的,但是ps aux显示的字符串中的空白是空格而不是tab,我们就要用空格来分割,有的字符串之间是多个空格,这里的 -f8 参数就是截取第8个字符串(有的系统可能是第6个),这个字符串就是mysql的CPU占用率啦!

          也许你会有疑问,既然已经得到mysql的CPU占用率了,为什么后面还有一个cut?问的好!我当初也没想到这个问题。因为我们要比较CPU的占用率 嘛,这里我们取得的字符串是一个浮点数(带小数点的),但是shell编程里面是不支持浮点数比较大小的。怎么办?那就比较整数呗,以“.”分割这个浮点 数,第一个就是整数部分,这样我们就取得了mysql占用率的整数部分。

          后面就是一个判断,如果大于300的话就就重启mysql服务。后面还有一个命令,这个命令是一个简单的“日志”,目的就是当重启一次服务就记录一下重启mysql的时间,便于以后分析网站的压力情况。

          接下来就是定期执行这个程序了,根据情况可以5分钟或者10分钟执行一次,只要编辑 /etc/crontab文件,加入如下语句:

    ?
    */5 *   * * *   root    /home/ma6174/mysql_restart.sh
  • 相关阅读:
    servlet中Cookie的编码问题
    servlet关于转发用法
    eclipse界面更改为黑色
    猜字符小游戏——可以设置等级
    uva 10655
    uva11029
    UVA11388 GCD LCM1 2 -1
    uva 11609
    poj 2436
    poj 2431
  • 原文地址:https://www.cnblogs.com/chongchong88/p/5538600.html
Copyright © 2020-2023  润新知