php-fpm死机解决办法,脚本后台自动重启
时间:2017-02-28 11:26 来源:未知 作者:IT
本人用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 #停止监听 (责任编辑:IT)
本人用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 #停止监听 (责任编辑:IT) |