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

  1. Nginx一次奇怪的502 报错

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

  2. Nginx一次奇怪的502 报错探究

    转载: https://mp.weixin.qq.com/s?__biz=MzIyMTg0OTExOQ==&mid=2247484152&idx=2&sn=8e2b9133fd ...

  3. 为什么PHP项目运行报错502,Nginx+PHP-FPM遇到的502报错

    1 首先查看一下目前php-fpm的进程数量 ps aux |grep php-fpm |grep -v grep |grep "^www"|wc -l 将输出结果与nginx.c ...

  4. 新部署的nginx访问出现502报错

    记录自己的一次排错,原理后续再补充.在公司使用网络代理上网.自己摸鱼安装部署nginx,自检一切环境正常,依赖正常.但访问出现502报错! 但是使用本机curl和宿主机telnet均出现以下问题: 问 ...

  5. php fpm 日志记录,如何解决nginx下php-fpm不记录php报错日志的问题

    如何解决nginx下php-fpm不记录php报错日志的问题 发布时间:2020-07-28 10:17:29 来源:亿速云 阅读:150 作者:Leah 本篇文章为大家展示了如何解决nginx下ph ...

  6. nginx php fpm 日志,nginx下php-fpm不记录php报错日志怎么办?

    解决nginx下php-fpm不记录php报错日志的办法:1.修改[php-fpm.conf]中配置,没有则增加:2.修改[php.ini]中配置,没有则增加:3.重启[php-fpm]即可. 解决n ...

  7. gitlab 安装与502报错

    sudo yum install -y curl policycoreutils-python openssh-server sudo systemctl enable sshd sudo syste ...

  8. nginx鉴权之后查看pdf报错未能加载pdf文档

    nginx鉴权之后查看pdf报错未能加载pdf文档,其他浏览器正常,只有谷歌浏览器出现了该问题 nginx做了鉴权后存在该问题现象,谷歌浏览器对于跨域的要求比较严格导致的 #主要是在nginx配置中加 ...

  9. linux系统Nginx下载安装步骤(含报错解决方法)

    linux系统Nginx下载安装步骤(含报错解决方法) 基础步骤 安装过程可能出现的报错及解决方法 执行 ./configure --prefix=/opt/nginx 报错 执行 make inst ...

最新文章

  1. argument在python里什么意思_在Python中星号*是什么意思?
  2. 美团今年应届生年薪 35w+?为什么互联网大厂校招的薪资一年比一年高?
  3. TCP/IP模型各层的作用和设备
  4. Hive时间是String格式截取字串和转换数据类型小贴士
  5. 蜗杆参数法设计_齿轮几何尺寸设计,很实用的Excel表格(附自动计算表格)
  6. php--- 转换编码
  7. mysql time转换输出_MySQL将timediff输出转换为日,时,分,秒格式?
  8. vb listview扁平表头的列表框
  9. 科大讯飞:讯飞输入法日语音交互次数超10亿,将发力5G和AIoT领域
  10. L2TP详解(五)——Client Initiated隧道和会话建立过程
  11. 编译easymule 1.1.5
  12. 多媒体架构---display介绍
  13. IT是什么意思?什么是IT行业?
  14. 云上城之个服务器维护时间,云上城之歌开服时间表 官方最新开服情况
  15. CSS背景图片平铺占满整个浏览器,且固定住不随滚动条移动
  16. 点击化学DBCO修饰药物(DBCO-PEG-雷替曲塞,甲氨喋呤MTX,培美曲塞,磺胺地索辛)
  17. 853计算机综合基础包括什么,2017年南京农业大学853计算机专业基础综合硕士研究生参考书目...
  18. yami认证显示连接服务器失败,yamip安装教程
  19. 5. 数据库题(以个人熟悉数据库为准、按要求写出sql) (1) 计算每个人的总成绩并排名(要求显示字段:学号,姓名,总成绩) (2) 计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最
  20. 云存储是什么?云存储的常见三种类型

热门文章

  1. 介绍汽车网络安全法规
  2. Go参考TcMalloc内存分配
  3. 财经知识 | 金融小白学习之旅
  4. “痕迹主义”在基层流行,已成形式主义新变种
  5. 皖西学院计算机证书,安徽皖西学院2017年3月计算机二级考试报名时间
  6. Abaqus CAE 2018插件使用详解:基于周期性边界条件定义3D几何模型的实践指南**
  7. VSCode代码整理,加行号的问题
  8. NUS博士毕业后的几点感受:学术与人生
  9. 【LeetCode - 286】墙与门
  10. UVM_MAX_QUIT_COUNT