newlogonewlogonewlogonewlogo
  • 首页
  • 直播系统开发
  • 一对一社交直播
  • 短视频系统开发
  • 定制开发
  • 关于萌鑫
  • 动态资讯

触发Nginx502错误条件与解决办法

  • 首页
  • 动态资讯
  • 系统运维
  • 触发Nginx502错误条件与解决办法
在linux里对mysql的一些操作命令
2014年8月29日
59种微信错误返回码说明看你都遇到了哪些
2014年9月2日
2014年8月31日
分类
  • 系统运维
标签
  • Nginx

一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。有些站长是在刚刚转移到Nginx之后就出现了这个问题,所以经常会怀疑这是不是Nginx的问题,但事实上这是个误区。

Nginx 502

以下是从张宴和Ayou的博客搜集整理的一些Nginx 502错误的排查方法,供大家参考:

Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的。这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在nginx身上,希望nginx下一个版本会把出错提示写稍微友好一些,至少不会是现在简单的一句502 Bad Gateway,另外还不忘附上自己的大名。

Nginx 502的触发条件

502错误最通常的出现情况就是后端主机当机。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是error timeout。error就是当机、断线之类的,timeout就是读取堵塞超时,比较容易理解。我一般是全写上的:

proxy_next_upstream error timeout invalid_header http_500 http_503;

不过现在可能我要去掉http_500这一项了,http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本来会打印一堆stacktrace的错误信息,现在被502取代了。但公司的程序员可不这么认为,他们认定是nginx出现了错误,我实在没空跟他们解释502的原理了……

503错误就可以保留,因为后端通常是apache resin,如果apache死机就是error,但resin死机,仅仅是503,所以还是有必要保留的。

解决办法

遇到502问题,可以优先考虑按照以下两个步骤去解决。
1、查看当前的PHP FastCGI进程数是否够用

netstat -anpo | grep "php-cgi" | wc -l

如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。
2、部分PHP程序的执行时间超过了Nginx的等待时间

可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:

......
 http
 {
 ......
 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 ......
 }
 ......

php.ini中memory_limit设低了会出错,修改了php.ini的memory_limit为64M,重启nginx,发现好了,原来是PHP的内存不足了。

如果这样修改了还解决不了问题,可以参考下面这些方案:
3、max-children和max-requests

一台服务器上运行着nginx php(fpm) xcache,访问量日均 300W pv左右

最近经常会出现这样的情况: php页面打开很慢,cpu使用率突然降至很低,系统负载突然升至很高,查看网卡的流量,也会发现突然降到了很低。这种情况只持续数秒钟就恢复了

检查php-fpm的日志文件发现了一些线索:

Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200, cur:51200
 Sep 30 08:32:23.290212 [NOTICE] fpm_sockets_init_main(), line 371: using inherited socket fd=10, “127.0.0.1:9000″
 Sep 30 08:32:23.290342 [NOTICE] fpm_event_init_main(), line 109: libevent: using epoll
 Sep 30 08:32:23.296426 [NOTICE] fpm_init(), line 47: fpm is running, pid 30587

在这几句的前面,是1000多行的关闭children和开启children的日志

原来,php-fpm有一个参数 max_requests,该参数指明了,每个children最多处理多少个请求后便会被关闭,默认的设置是500。因为php是把请求轮询给每个children,在大流量下,每个childre到达max_requests所用的时间都差不多,这样就造成所有的children基本上在同一时间被关闭。

在这期间,nginx无法将php文件转交给php-fpm处理,所以cpu会降至很低(不用处理php,更不用执行sql),而负载会升至很高(关闭和开启children、nginx等待php-fpm),网卡流量也降至很低(nginx无法生成数据传输给客户端)

解决问题很简单,增加children的数量,并且将 max_requests 设置未 0 或者一个比较大的值:

打开 /usr/local/php/etc/php-fpm.conf

调大以下两个参数(根据服务器实际情况,过大也不行)

<valuename=”max_children”>5120</value>
<valuename=”max_requests”>600</value>

然后重启php-fpm。
4、增加缓冲区容量大小

将nginx的error log打开,发现“pstream sent too big header while reading response header from upstream”这样的错误提示。查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。参考老外写的修改办法增加了缓冲区容量大小设置,502问题彻底解决。后来系统管理员又对参数做了调整只保留了2个设置参数:client head buffer,fastcgi buffer size。
5、request_terminate_timeout

如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:request_terminate_timeout

这个值是max_execution_time,就是fast-cgi的执行脚本时间。

0s为关闭,就是无限执行下去。(当时装的时候没仔细看就改了一个数字)

发现,问题解决了,执行很长时间也不会出错了。

优化fastcgi中,还可以改改这个值5s 看看效果。

php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。

 

本文由:牛牛逼逼叉叉博主收藏
来源: 51CTO
原文: http://os.51cto.com/art/201011/233698.htm

湖北萌鑫达网络科技
湖北萌鑫达网络科技
湖北萌鑫达网络科技有限公司是一家互联网软件开发科技公司,致力于为中国企业提供高品质的互联网解决方案服务,主要从事移动app开发,以及行业解决方案服务; 萌鑫科技软件的互联网+方案涉及:视频直播、短视频,社交app、商城、教育、金融理财、移动办公、新闻、社交、汽车、旅游、酒店宾馆、餐饮、服装、通信、母婴、医疗、生鲜等多行业领域。

相关文章

2016年7月19日

使用ab命令对Apache服务器进行负载压力测试


阅读更多
2016年7月19日

Apache MPM Prefork模式参数调优方法


阅读更多
2016年7月19日

VPS中的Apache参数性能调优建议


阅读更多
2016年5月20日

WDCP的phpmyadmin网站服务器版本和mysql版本不一致


阅读更多

发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注

  • 0
    萌鑫达直播源码搭建这些功能少不了
    2019年12月11日
  • 0
    火爆直播界的带货系统该如何做
    2019年12月11日
  • 0
    直播APP开发的宣传方案需要我们这样做
    2019年12月10日
  • 0
    5G下的一对一直播平台该如何搭建才行
    2019年12月10日
  • 0
    直播源码搭建选择软件开发公司靠谱吗?
    2019年12月10日

分类目录

  • app开发
  • Linux
  • mysql
  • PHP
  • SEO
  • wordpress
  • 一对一直播系统
  • 前端工具
  • 前端开发
  • 工具
  • 未分类
  • 生活点滴
  • 直播系统开发
  • 短视频app系统
  • 社交app开发
  • 系统运维
  • 网站建设
  • 网络安全
  • 萌鑫直播系统
  • 萌鑫短视频系统
  • 行业动态
  • 资源共享
  • 运维技术

标签

apache APP开发 css DDOS docker Google html html5 JavaScript linux MariaDB MySQL Nginx PHP PR seo wdcp WEB wordpress 一对一直播 一对一直播app开发 一对一直播开发 一对一社交 外链 开发 标签 深入浅出Docker 源码 源码开发 百度 直播 直播app 直播app开发 直播开发 直播源码 直播程序开发_直播开发资讯 直播系统开发 短视频app 短视频app开发 社交APP 社交app开发 系统开发 视频app 视频直播 视频直播app
  • sitemap
  • 开发源码
  • 织梦后台
  • 网站地图
  • IIS7下伪静态
  • 直播apo
  • PHPCMS v9
  • 开发运营
  • PHPCMS伪静态
  • 在线直播
  • 系统检测
  • 诊断
  • 开发系统
  • SMARTD
  • smartmontools
  • 系统开发,app源码
  • 直播app源码
  • USB
  • 开发软件
  • 攻击
  • 思维导图
  • 电商直播系统开发
  • 一对一开发
  • 响应式
  • 短视频源码

湖北萌鑫达网络科技有限公司

公司电话:027-65525528

企业邮箱:info@mengxinkj.com

公司地址:武汉市洪山区现代·光谷世贸中心H座10层

系统源码产品

  • 直播系统源码开发
  • 短视频系统源码开发
  • 一对一社交直播系统

其它产品

  • APP系统定制开发

关于我们

  • 关于萌鑫达网络科技
  • 联系我们
  • 动态资讯
©2019 湖北萌鑫达网络科技有限公司。直播社交短视频等APP开发解决方案服务商 · 鄂ICP备19022272号 · 企业信息公示
  • 直播系统开发
  • 直播APP开发
  • 一对一直播开发
  • 短视频app开发