php-fpm进程自动重启脚本

php-fpm进程自动重启脚本
脚本写的很烂,大佬们轻点喷,主要就是想记录一下写脚本过程中学到的东西以及一些思路…
很多人觉得会写几个脚本让服务器检测到故障并作出相应反应就是自动化运维,我只能说,你们要学的还很多

1.我想干什么?

首先想清楚我想干什么?服务器重启?输出日志?还是启动相关进程?这一点很重要,我需要的是reload php-fpm进程,减少未连接的空闲进程数量并使服务器内存得到暂时释放,注意这里是暂时,因为php-fpm进程分配模式有三种,下面是配置文档里面的说明

; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI. The below defaults are based on a server without much resources. Don't
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.

简单说就是三种模式,static是静态,固定pm.max_children个php-fpm空闲进程进行等待连接;dynamic是动态,设定最小空闲连接数pm.min_spare_servers)和最大空闲连接数(pm.max_spare_servers)以及初始服务启动连接数(pm.start_servers),服务器启动后有初始服务启动连接数个进程,工作忙了增加,但不超过最大空闲连接数,工作悠闲了减少,但不少于最小空闲连接数,持续动态的调整进程数,看起来很美好,可频繁的增加减少服务器进程会增加CPU的功耗,显然不是高并发服务器的首选;最后的onemand则是来一个加一个,走一个减一个,效率最低下,但最省内存;一个php进程最大消耗30MB,根据服务器负载自行计算,static在高内存情况下是首选,但不可避免占用大量服务器内存导致服务器负载过大,当然这是题外话,幡然醒悟我已经跑题了。。。
所以我想重启php-fpm进程

kill -USR2 `cat /var/run/php-fpm.pid` && echo "`date +%Y-%m-%d,%H:%M`  当前内存剩余空间为 ${mem_free}MB" >> /tmp/mem_report.txt

kill pid文件是因为pid是随机分配的,鬼知道下次他是啥,所以输出个pid文件直接kill pid文件就可以了,注意后半段是" ` “号,在tab键上面,顿号的作用是运行``之间的命令,并且将命令运行的结果返回.两个”&&“表示执行完上半段继续执行下半段,”>>“表示持续输出至文件,一个”>"的话会自动覆盖,需要两个进行自动持续输出;

2.什么情况下执行

肯定内存不足啦!
先写个计算剩余内存的命令

free -m | grep "Mem" | awk '{print $4+$6}'    #这里的剩余内存计算并不精确,linux内存管理正在研究

3.千篇一律的if,else语句。。。

#!bin/sh
mem_warn='2048'                                #剩余内存报警线
mem_free=`free -m | grep "Mem" | awk '{print $4+$6}'`           #服务器剩余内存
if [ $mem_free -lt $mem_warn  ]          #服务器剩余内存小于剩余内存报警线
then
	kill -USR2 `cat /var/run/php-fpm.pid` && echo "`date +%Y-%m-%d,%H:%M`  当前内存剩余空间为 ${mem_free}MB" >> /tmp/mem_report.txt  #执行reload重载
else
	exit                   #没啥事就退出吧~
fi

4.扔到crontab让它自己去进行定时执行

略~ 懒的写了~

5.总结

有些人工判断的问题其实写个脚本扔那儿自动执行就可以去学习Python了,本来想基于python写,但考虑到一堆模块导入很麻烦,再加上生产服务器各种神奇的bug,索性还是用shell吧,东西没含金量,各位看客懂的当看个笑话,不懂的权当少走弯路,以后我会回来嘲讽我自己写的东西的~~~~~~~~~~~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值