为什么PHP项目运行报错502,Nginx+PHP-FPM遇到的502报错
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
如果有什么缺漏,请大家多多指点,谢谢
为什么PHP项目运行报错502,Nginx+PHP-FPM遇到的502报错相关推荐
- nginx环境下执行php文件就报502,nginx请求php文件提示502错误 | 吴老二
nginx的文件提示502就是服务没有启动,这里不管是php还是java.出现502的问题都是服务没有启动,下面浮现一下,首先在nginx的配置文件里写了一个php版本的文件. [root@wulao ...
- Nginx一次奇怪的502 报错
1 一次奇怪的线上问题 之前遇到nginx报出了如下的error,upstream sent too big header while reading response from upstream,导 ...
- laravel项目运行 php artisan cache:clear 命令报错
laravel项目运行 php artisan cache:clear 命令报错 vscode 项目运行 php artisan cache:clear 命令 出现报错 Failed to clear ...
- vue/cle3项目运行报错sockjs-node/info解决方案
https://cloud.tencent.com/developer/article/1489598 vue/cle3项目运行报错sockjs-node/info解决方案 在这篇文章中: bug复现 ...
- 创建Spring boot项目运行出现报错: java: 无效的源发行版: 14
触发场景:创建Spring boot项目运行出现报错\ 首先在左边的项目中选择pom.xml文件 找到这行,把中间的版本改成自己下载的java版本 我的是1.8,改好后再点maven刷新即可
- vue项目运行报错 node_modules/.bin/vue-cli-service: Permission denied
vue项目运行 npm run serve 报错 sh: /Users/wang/WebstormProjects/test_web/node_modules/.bin/vue-cli-service ...
- 【项目运行报错】These dependencies were not found: core-js/modules/es6.array.fill in ./node_modules
项目运行报错 These dependencies were not found: core-js/modules/es6.array.fill in ./node_modules/cache-loa ...
- vue 项目运行报错 multiple chunks emit assts to the same filename js/401.js(chunks 401 and 401)
VUE项目运行报这个错误也没有说哪里有错误,只说有名字冲突,整个项目搜下来都没发现有相同的名字,百度也没人说.自己摸索的解决掉了.有两种情况. 情况一:如果是添加路由的时候就报这个错 解决办法: 把c ...
- Python项目运行报错 django.core.exceptions.ImproperlyConfigured: WSGI application ‘WebTool.wsgi.application
问题描述:使用Pycharm运行python项目报错:django.core.exceptions.ImproperlyConfigured: WSGI application 'WebTool.ws ...
- 【吭】django项目运行jira项目突然报错TypeError: session() takes 1 positional argument but 2 were given
在linux重新部署时,pip install jira 默认安装最新版本3.0,导致项目运行时报错如下: 解决办法,卸载jira库,重新安装指定版本: 也可以修改代码使用最新的jira库.
最新文章
- oracle 判断11位数字,45个非常有用的 Oracle 查询语句小结
- 为何倡导以质量为导向的项目管理?
- 简述Android触摸屏手势识别
- python multi_python – 堆叠MultiIndex的所有级别
- oracle数据库查询表语句,oracle数据库重要的查询语句
- 当我们在谈深度学习时,到底在谈论什么(二)--转
- Color types not allowed (at ‘drawable’ with value ‘#f0f0f0’)
- CentOS 7下搭建配置 SVN 服务器
- 模拟登录QQ判断是否需要验证码
- SAP ABAP 服务器上OData Gateway 框架代码的单步调试
- 飞天2.0 | 万物智能的基础服务
- 面试官:讲一下Jvm中如何判断对象的生死?
- javascript中为某个对象(控件)绑定事件的几种方法
- [IOS]开源库RegexKitLite正则表达式的使用
- android textview电话号码,Android应用开发之Android EditTextView 实现带空格分隔的输入(电话号码,银行卡)...
- 阶段3 1.Mybatis_12.Mybatis注解开发_8 mybatis注解开发使用二级缓存
- TRUNCATE TABLE command not allowed within multi-statement transaction
- ubuntu12.04安装配置opensips,搭建voip服务器
- 台式计算机如何联络无线网,台式电脑怎么无线上网
- 【系统分析师之路】计算机组成原理章节错题集锦
热门文章
- 【树模型与集成学习】(task4)两种并行集成的树模型
- 3W1H分析法,全面构建数据分析思维!
- 光纤之父高锟:从痴人说梦到诺贝尔物理学奖
- opencv中的MSER的使用和NMS后图片文字区域
- life in a day
- XXL-JOB注册执行流程
- 【Java】到底什么是包?|最通俗易懂讲解|保姆级
- css 点击(onMouseDown和onMouseUp)后,hover失效
- java post json请求_java模拟post请求发送json
- 质量管理体系中 “基于风险的思维”的理解