首先,我们要获取服务器的内存使用率。通过free可以获取总内存大小以及使用内存多少
[root@jackie ~]# free total used free shared buff/cache available Mem: 1882000 728120 407880 4440 746000 980784 Swap: 1049596 0 1049596
我们需要的是Mem那行的,total以及used项。我们通过grep以及awk命令,可以获得当前系统的内存使用率。
free |grep -i mem | awk '{n=$3/$2; printf("%.0f", n * 100)}'
获得了内存使用率后,然后拿它和预设值作比较。当大于预设值时,就把系统中所以php-fpm进程杀死。那么接下来的工作就是如何找出系统中所有php-fpm进程,以及如何去杀死这些进程。
想要获取系统所有的php-fpm进程,可以使用ps命令,然后结合grep过滤即可。
1 [root@jackie ~]# ps aux | grep php-fpm | grep -v grep | grep -v master 2 www 1811 0.0 0.4 220504 8416 ? S Jul25 0:00 php-fpm: pool www 3 www 1812 0.0 0.4 220504 8440 ? S Jul25 0:00 php-fpm: pool www 4 www 1813 0.0 0.4 220376 8432 ? S Jul25 0:00 php-fpm: pool www 5 www 1814 0.0 0.4 220508 8392 ? S Jul25 0:00 php-fpm: pool www 6 www 1815 0.0 0.4 220508 8412 ? S Jul25 0:00 php-fpm: pool www 7 www 2761 0.0 0.4 220376 8396 ? S Aug12 0:00 php-fpm: pool www 8 www 7448 0.0 0.4 220376 8412 ? S Jul31 0:00 php-fpm: pool www 9 www 16877 0.0 0.8 247856 16172 ? S 13:06 0:00 php-fpm: pool www 10 www 16878 0.0 0.8 247856 16176 ? S 13:06 0:00 php-fpm: pool www 11 www 16880 0.0 0.8 247856 16488 ? S 13:06 0:00 php-fpm: pool www 12 www 16881 0.0 0.8 247856 16488 ? S 13:06 0:00 php-fpm: pool www 13 www 16882 0.0 0.8 247856 16488 ? S 13:06 0:00 php-fpm: pool www 14 www 16884 0.0 0.8 247856 16176 ? S 13:06 0:00 php-fpm: pool www 15 www 16885 0.0 0.7 247856 14572 ? S 13:06 0:00 php-fpm: pool www 16 www 16886 0.0 0.7 247856 15052 ? S 13:06 0:00 php-fpm: pool www 17 www 16887 0.0 0.7 247856 15052 ? S 13:06 0:00 php-fpm: pool www 18 www 16888 0.0 0.8 247856 15240 ? S 13:06 0:00 php-fpm: pool www
......
通过上面的命令获取到了所有php-fpm进程,然后我们遍历这些信息,通过kill 进程号,来杀死php-fpm进程。
下面给出完整的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编程条件分支以及循环结构
链接:https://mp.weixin.qq.com/s/Tl6cZuVMBebPDA2U0zEj7A