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报错相关推荐

  1. nginx环境下执行php文件就报502,nginx请求php文件提示502错误 | 吴老二

    nginx的文件提示502就是服务没有启动,这里不管是php还是java.出现502的问题都是服务没有启动,下面浮现一下,首先在nginx的配置文件里写了一个php版本的文件. [root@wulao ...

  2. Nginx一次奇怪的502 报错

    1 一次奇怪的线上问题 之前遇到nginx报出了如下的error,upstream sent too big header while reading response from upstream,导 ...

  3. laravel项目运行 php artisan cache:clear 命令报错

    laravel项目运行 php artisan cache:clear 命令报错 vscode 项目运行 php artisan cache:clear 命令 出现报错 Failed to clear ...

  4. vue/cle3项目运行报错sockjs-node/info解决方案

    https://cloud.tencent.com/developer/article/1489598 vue/cle3项目运行报错sockjs-node/info解决方案 在这篇文章中: bug复现 ...

  5. 创建Spring boot项目运行出现报错: java: 无效的源发行版: 14

    触发场景:创建Spring boot项目运行出现报错\ 首先在左边的项目中选择pom.xml文件 找到这行,把中间的版本改成自己下载的java版本 我的是1.8,改好后再点maven刷新即可

  6. 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 ...

  7. 【项目运行报错】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 ...

  8. vue 项目运行报错 multiple chunks emit assts to the same filename js/401.js(chunks 401 and 401)

    VUE项目运行报这个错误也没有说哪里有错误,只说有名字冲突,整个项目搜下来都没发现有相同的名字,百度也没人说.自己摸索的解决掉了.有两种情况. 情况一:如果是添加路由的时候就报这个错 解决办法: 把c ...

  9. Python项目运行报错 django.core.exceptions.ImproperlyConfigured: WSGI application ‘WebTool.wsgi.application

    问题描述:使用Pycharm运行python项目报错:django.core.exceptions.ImproperlyConfigured: WSGI application 'WebTool.ws ...

  10. 【吭】django项目运行jira项目突然报错TypeError: session() takes 1 positional argument but 2 were given

    在linux重新部署时,pip install jira 默认安装最新版本3.0,导致项目运行时报错如下: 解决办法,卸载jira库,重新安装指定版本: 也可以修改代码使用最新的jira库.

最新文章

  1. oracle 判断11位数字,45个非常有用的 Oracle 查询语句小结
  2. 为何倡导以质量为导向的项目管理?
  3. 简述Android触摸屏手势识别
  4. python multi_python – 堆叠MultiIndex的所有级别
  5. oracle数据库查询表语句,oracle数据库重要的查询语句
  6. 当我们在谈深度学习时,到底在谈论什么(二)--转
  7. Color types not allowed (at ‘drawable’ with value ‘#f0f0f0’)
  8. CentOS 7下搭建配置 SVN 服务器
  9. 模拟登录QQ判断是否需要验证码
  10. SAP ABAP 服务器上OData Gateway 框架代码的单步调试
  11. 飞天2.0 | 万物智能的基础服务
  12. 面试官:讲一下Jvm中如何判断对象的生死?
  13. javascript中为某个对象(控件)绑定事件的几种方法
  14. [IOS]开源库RegexKitLite正则表达式的使用
  15. android textview电话号码,Android应用开发之Android EditTextView 实现带空格分隔的输入(电话号码,银行卡)...
  16. 阶段3 1.Mybatis_12.Mybatis注解开发_8 mybatis注解开发使用二级缓存
  17. TRUNCATE TABLE command not allowed within multi-statement transaction
  18. ubuntu12.04安装配置opensips,搭建voip服务器
  19. 台式计算机如何联络无线网,台式电脑怎么无线上网
  20. 【系统分析师之路】计算机组成原理章节错题集锦

热门文章

  1. 【树模型与集成学习】(task4)两种并行集成的树模型
  2. 3W1H分析法,全面构建数据分析思维!
  3. 光纤之父高锟:从痴人说梦到诺贝尔物理学奖
  4. opencv中的MSER的使用和NMS后图片文字区域
  5. life in a day
  6. XXL-JOB注册执行流程
  7. 【Java】到底什么是包?|最通俗易懂讲解|保姆级
  8. css 点击(onMouseDown和onMouseUp)后,hover失效
  9. java post json请求_java模拟post请求发送json
  10. 质量管理体系中 “基于风险的思维”的理解