搜索
首页
笔记
案例
关于
课程列表
shell script
执行多个目录下的php脚本
内存检查超过设定值杀死所有php-fpm进程
监控httpd进程数
统计活动IP
判断pid是否一致
网站文件及数据库文件的备份
源码安装mysql
监控磁盘分区的使用率
监控网卡流量
批量创建用户、删除用户
监听端口情况
rm命令太危险,使用自定义的del代替
监控cpu状况
服务器文件备份脚本
课程导航
计算机基础知识
C
Linux
linux常用软件
计算机网络
程序员修养
设计模式
工具
Git
composer
vim
IntelliJ IDEA
wireshark
laravel
Spring
SpringMVC
Maven
数据库
MySQL
Redis
MongoDB
JDBC
Mybatis
MyBatis-Plus
服务端编程
PHP
Java
shell script
JavaWeb
HTML / CSS
HTML
CSS
HTML5
CSS3
BOOTSTRAP
JavaScript
JavaScript
JQuery
layui
执行多个目录下的php脚本
监控httpd进程数
内存检查超过设定值杀死所有php-fpm进程
公司之前购买过一个源码,写这个源码的工程师当时没有考虑全面,设计数据库表结构有点问题,当公司的数据达到几十万级别的时候,该网站基本就跑不动了。原因是查询的时候没有使用索引,造成了大量的数据库慢查询,服务器同时存在许多php-fpm进程运行。几乎耗尽了服务器cpu和内存。 当定位到问题后,重新设计了表结构,给对应的几个字段加上了索引。加上索引之后,还是偶尔会出现cpu、内存快耗尽的情况。对于这种情况,我编写了一个shell脚本,用来监控服务器内存的使用率,但达到预设值时,杀死所有的php-fpm进程,释放服务器的压力。 首先,我们要获取服务器的内存使用率。通过free可以获取总内存大小以及使用内存多少 ```shell # free total used free shared buff/cache available Mem: 7999972 5432684 152496 2480 2414792 2284544 Swap: 0 0 0 ``` 我们需要的是Mem那行的,total以及used项。我们通过grep以及awk命令,可以获得当前系统的内存使用率。 ```shell free |grep -i mem | awk '{n=$3/$2; printf("%.0f", n * 100)}' ``` 获得了内存使用率后,然后拿它和预设值作比较。当大于预设值时,就把系统中所以php-fpm进程杀死。那么接下来的工作就是如何找出系统中所有php-fpm进程,以及如何去杀死这些进程。 想要获取系统所有的php-fpm进程,可以使用ps命令,然后结合grep过滤即可。 ```shell ps aux | grep php-fpm | grep -v grep | grep -v master www 21210 0.0 0.1 157852 8596 ? S 19:33 0:00 php-fpm: pool www www 21211 0.0 0.1 157852 8596 ? S 19:33 0:00 php-fpm: pool www …… ``` 通过上面的命令获取到了所有php-fpm进程,然后我们遍历这些信息,通过kill 进程号,来杀死php-fpm进程。 下面给出完整的shell脚本程序: ```shell #!/bin/bash # 内存检查,超过70%,杀死所有php-fpm进程 MEM_LIM=70 used=$(free | grep -i mem | awk '{n=$3/$2;printf("%.0f", n*100)}') if ((used > MEM_LIM));then pids=`ps aux | grep php-fpm | grep -v grep | grep -v master | awk '{print $2}'` for pid in $pids do kill -9 $pid done fi ``` 上述的脚本是非常简单了,清晰命令。下面总结下该脚本程序使用了哪些知识点: * free命令获取内存使用率 * ps命令获取所有php-fpm进程 * kill命令杀死进程 * shell编程条件分支以及循环结构
执行多个目录下的php脚本
监控httpd进程数
文章目录