用nginx+php7搭建了一台服务器,因为请求量太大,而且php里面又有挂起的任务,导致php-fpm在高峰期的时候经常死掉, 把php-fpm的最大进程数已经改到1000了,还是吃不消,cpu也是超负荷,每次都要手动重启,太烦人,因此本人写了一个shell脚本,后台监听php-fpm,等达到一定数量让他重启,这样就有效的解决了手动重启,死机问题了。
1.声明文档头跟定义变量
#!/usr/bin/env bash maxCount=300 #php-fpm最大进程数 basePath=$(cd `dirname $0`; pwd) #脚本所在目录 pidFilePath="$basePath/pid.conf" #pid存放文件 errorFilePath="$basePath/error.txt" #错误日志存放文件
2.定义关键函数
getDateTime(){ date "+%Y-%m-%d %H:%M:%S" }
restart(){ kill-USR2$(cat /usr/local/php/var/run/php-fpm.pid) }
start(){ /usr/local/php/sbin/php-fpm }
stop(){ kill $(cat /usr/local/php/var/run/php-fpm.pid) }
stopweb(){ if [ -f "$pidFilePath" ];then kill $(cat "$pidFilePath")2>/dev/null rm -r "$pidFilePath" fi }
main(){ stopweb echo "$$">>"$pidFilePath" while((1)) do count=$(ps aux | grep -c php-fpm) if (("$count">="$maxCount"));then restart date=$(getDateTime) echo "date:$date,maxCount:$maxCount,count:$count">>"$errorFilePath" fi sleep 10 done }
3.加入启动参数
case $1 in "restart") restart ;; "start") start ;; "stop") stop ;; "run") main ;; "stopweb") stopweb ;; *) echo "cmd error!" ;; esac
4.终止脚本
exit 0
运行命令
./webserver restart #重启php-fpm ./webserver start #开启php-fpm ./webserver stop #停止php-fpm setsid ./webserver run & #开启监听,后台运行& ./webserver stopweb #停止监听