nginx+php-fpm遇到的502报错
来源:互联网 发布:ssm 打印sql 编辑:程序博客网 时间:2024/05/17 08:39
1 首先查看一下目前php-fpm的进程数量
ps aux |grep php-fpm |grep -v grep |grep "^www"|wc -l
将输出结果与nginx.conf配置文件中的max_children参数做对比
如果两个值相近,那么就需要将max_children相应的增加
2 看一下nginx.conf配置文件中Nginx的等待时间的设置,可以相应增加
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
后来我将网站上一个shell脚本做了相应的修改:
主要是检测php-fpm进程的
脚本原则:
在检测到502报错之后,在干掉php-fpm进程之前先弄清楚一些东西:
统计子进程的数量是为了,判断一下是不是因为子进程的数量接近配置文件中max_children这个值的设置
如果这两个值很接近的话,说明排队的php请求比较多,处理请求过于繁忙也会导致502报错
统计CPU使用率最大的php-fpm进程所占用的CPU%,并记录相应的进程号,可以追踪进程号,做初步确定是否是 file_get_contents() 导致的问题
总之这些操作是有助于分析事发原因的
另外,如果killall进程之后不检测是否将进程杀干净,有可能会影响进程的重新启动,所以有必要进行这一步判断
如果运行该脚本的机器是在线服务器,那么当检测到进程没有杀干净时,最好报警或者是记录日志,尽量避免一直杀进程的操作
脚本内容:
#!/bin/bash
funCheck()
{
if [ -z "`ps aux |grep php-fpm |grep -v grep`" ];then
if [ -z "`cat /usr/local/php/php-fpm.pid `" ];then
echo "php-fpm process doesn't exist ,you can start it now `date`" >> $Log
else
echo "php-fpm process exists still `date`" >> $Log
fi
fi
}
Log=/home/sysadmin/zhaoyj/log/PhpFpm.log
ChildProcess=`ps aux |grep php-fpm |grep -v grep |grep "^www"|wc -l`
DATE=`date "+%Y%m%d-%H:%M:%S"`
Message="MG Server php-fpm child process number is $ChildProcess at $DATE"
Admin="邮件地址"
if [ -e /var/lock/subsys/502 ]
then
if [ $ChildProcess -ge 100 ];then
echo "$Message" |mail -s "$Message" $Admin
echo "$Message" >> $Log
fi
Record=``ps aux |grep php-fpm|grep -v grep |awk '{print $3"\t"$2"\t"$11}'|tr -d :|sort -nr|head -1`
CPU=`awk '{print $1}' $Record`
PID=`awk '{print $2}' $Record`
Result=`awk -v NUM1=$CPU -v NUM2=50 'BEGIN{print(NUM1>NUM2)?"1":"0"}'`
Message2="php-fpm child process CPU% is $Result"
if [ $Result -eq 0 ];then
echo "$Message2 ,normal now $DATE" >> $Log
else
echo "$Message2 ,not normal now $DATE" >> $Log
echo "$Message2 ,not normal now $DATE" |mail -s "$Message2 ,not normal now $DATE" $Admin
fi
killall -9 curl 2>/dev/null
killall -9 php-fpm 2>/dev/null
funCheck
service php-fpm start >/dev/null
echo "[ `date +'%h %d %T'` ] PHP-FPM died with no response, all processes restarted">>/usr/local/php/log/php-fpm-restart.log
else
touch /var/lock/subsys/502
if [ `curl --connect-timeout 5 -I URL 2>/dev/null | grep '502 Bad Gateway' -c` != '0' ]
then
killall -9 php-fpm 2>/dev/null
funCheck
service php-fpm start >/dev/null
echo "[ `date +'%h %d %T'` ] PHP-FPM died with 502 bad gateway, all processes restarted">>/usr/local/php/log/php-fpm-restart.log
fi
rm -f /var/lock/subsys/502
fi
如果有什么缺漏,请大家多多指点,谢谢
- nginx+php-fpm遇到的502报错
- nginx+php-fpm遇到的502报错
- Centos 7 nginx php-fpm 报错
- 搭建nginx+php-fpm+php服务遇到的问题
- Nginx + PHP(php-fpm)遇到的502 Bad Gateway错误
- php-fpm nginx配置,报502错误问题
- nginx+php-fpm 上传大文件报502 Bad Gateway
- nginx+php-fpm访问报错,显示access denied
- Ubuntu 默认Nginx+php-fpm报502 504 50X问题的解决
- linux系统下nginx+php-fpm报错:502 Bad Gateway解决方法
- php-fpm报502问题
- Nginx下php-fpm引起的502 Bad Gateway解决办法
- 在nginx和php-fpm下一访问nginx就瞬间502的问题 php-fpm signal 7 (SIGBUS)
- nginx加php-fpm报502 bad gateway错误五种解决方法
- 简单的service编写 nginx php-fpm
- nginx+fpm记录php的error log
- nginx+fpm记录php的error log
- zabbix监控nginx、php-fpm的状态
- 23种设计模式——Decorator模式
- 刷新页面
- 模拟Struts1实现防表单重复提交
- Linux中如何创建静态库和动态库
- 使用SuperSocket实现TLV自定义协议网络通信的Demo
- nginx+php-fpm遇到的502报错
- GridView获取行所在的索引
- Drag&Drop ListView
- 黑马程序员_Java的集合类型
- postgresql建立外表
- printf的应用脚本
- linux kernel module - hello world
- C# 实现将阿拉伯数字转换成中文大写金额
- 最全的eclipse 插件