当定位到问题后,重新设计了表结构,给对应的几个字段加上了索引。加上索引之后,还是偶尔会出现cpu、内存快耗尽的情况。对于这种情况,我编写了一个shell脚本,用来监控服务器内存的使用率,一旦达到预设值时,杀死所有的PHP-fpm进程,释放服务器的压力。
首先,我们要获取服务器的内存使用率。通过free可以获取总内存大小以及使用内存多少
# free total used free shared buff/cache availableMem: 7999972 5432684 152496 2480 2414792 2284544Swap: 0 0 0
我们需要的是Mem那行的,total以及used项。我们通过grep以及awk命令,可以获得当前系统的内存使用率。
free |grep -i mem | awk '{n=/; printf("%.0f", n * 100)}'
获得了内存使用率后,然后拿它和预设值作比较。当大于预设值时,就把系统中所以PHP-fpm进程杀死。那么接下来的工作就是如何找出系统中所有PHP-fpm进程,以及如何去杀死这些进程。
想要获取系统所有的PHP-fpm进程,可以使用ps命令,然后结合grep过滤即可。
ps aux | grep PHP-fpm | grep -v grep | grep -v masterwww 21210 0.0 0.1 157852 8596 ? S 19:33 0:00 PHP-fpm: pool wwwwww 21211 0.0 0.1 157852 8596 ? S 19:33 0:00 PHP-fpm: pool www……
通过上面的命令获取到了所有PHP-fpm进程,然后我们遍历这些信息,通过kill 进程号,来杀死PHP-fpm进程。
下面给出完整的shell脚本程序:
#!/bin/bash# 内存检查,超过70%,杀死所有PHP-fpm进程MEM_liM=70used=$(free | grep -i mem | awk '{n=/;printf("%.0f", n*100)}')if ((used > MEM_liM));then pIDs=`ps aux | grep PHP-fpm | grep -v grep | grep -v master | awk '{print }'` for pID in $pIDs do kill -9 $pID donefi
上述的脚本是非常简单了,清晰命令。下面总结下该脚本程序使用了哪些知识点:
free命令获取内存使用率
ps命令获取所有PHP-fpm进程
kill命令杀死进程
shell编程条件分支以及循环结构
总结以上是内存溢出为你收集整理的shell编程实战之内存检查超过设定值杀死php-fpm进程全部内容,希望文章能够帮你解决shell编程实战之内存检查超过设定值杀死php-fpm进程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)