shell编程很强大!

网站访问量大的时候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
 

最新文章

  1. APNS 远程推送通知 PUSH deviceToken
  2. 使用Vue构建中(大)型应用
  3. CSS书写建议参考
  4. 修改win10打开文件资源管理器
  5. 夺命雷公狗---node.js---9实现页面的跳转
  6. 重置mysql的root密码
  7. jqcss选择器
  8. jQuery第三章
  9. Alamofire源码解读系列(四)之参数编码(ParameterEncoding)
  10. git远程仓库之添加远程库
  11. Timeline Style
  12. MySQL运用
  13. JavaScript杂谈(第六天)
  14. Java数据库操作(MySQL与SQLserver)
  15. Echarts绘制横向柱状图
  16. HDU 2680 Choose the best route(SPFA)
  17. kubernetes-pod分配CPU和RAM资源以及计算方法
  18. angular指令中使用ngModelController
  19. Springboot @webfilter @order filter过滤器
  20. 洛谷P2422 良好的感觉

热门文章

  1. [解决方案]在Sql Server 2008/2005 数据库还原出现 3154错误
  2. form表单和ajax表单提交(Html.BeginForm()、Ajax.BeginForm())的差别
  3. Qt——树的搜索
  4. Linux10.11-10.18)学习笔记(
  5. Openwrt flash 空间不足的临时解决方法
  6. 20145222黄亚奇《Java程序设计》第6周学习总结
  7. 20145215实验五 Java网络编程及安全
  8. 使用yuicompressor-maven-plugin压缩js及css文件
  9. WCF 入门(29)
  10. Bootstrap3.0学习第十五轮(大屏幕介绍、页面标题、缩略图、警示框、Well)