php-fpm死机解决办法,脚本后台自动重启

Posted Renew全栈开发工程师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php-fpm死机解决办法,脚本后台自动重启相关的知识,希望对你有一定的参考价值。

本人用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 #停止监听

完整脚本下载在qq群里面:群号490328630

以上是关于php-fpm死机解决办法,脚本后台自动重启的主要内容,如果未能解决你的问题,请参考以下文章

64位Win7系统在管理员权限下使用chkdsk命令时直接蓝屏死机然后重启的一种解决办法(不一定通用)

kindle 反复重启

64位Win7系统安装国外软件时直接蓝屏死机然后重启的一种解决办法(不一定通用)

sh 监控的php-fpm的进程数并自动重启PHP-FPM的外壳脚本

已经root了,怎么还显示权限不够呢,求解决办

Nginx提示502和504错误的终极解决方案