仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1477|回复: 9
打印 上一主题 下一主题

[其他Linux] 来看看:Nginx 502 bad gateway和Nginx 504 Gateway Time-out毛病办理办法 毛病办理举措 ...

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 16:47:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你学不好的话,你在linux中开发的机会就很少,或者说几乎没有,它的优势就消失了,然后随着时间的流逝,你就会全部忘记她;
比来服务器宕机的征象对照频仍,临上班时分,G给挂失落了,502BadGatewayNginx,忍不住让我想起之前的504GatewayTime-out,二者应当有点接洽,必定得弄分明。Nginx504GatewayTime-out的寄义是所哀求的网关没有哀求到,复杂来讲就是没有哀求到能够实行的PHP-CGI。

办理这两个成绩实际上是必要综合思索的,一样平常来讲Nginx502BadGateway和php-fpm.conf的设置有关,而Nginx504GatewayTime-out则是与nginx.conf的设置有关。

Nginx504Gateway在之前的文章中已纪录过,这里临时疏忽,间接说502badgateway的办理办法,最关头的是php-fpm.conf的设置。php-fpm.conf有两个相当主要的参数,一个是”max_children”,另外一个是”request_terminate_timeout”,这两个值是必要盘算的。

假如你的服务器功能充足好,且宽带资本充足充分,PHP剧本没有系轮回或BUG的话你能够间接将”request_terminate_timeout”设置成0s。0s的寄义是让PHP-CGI一向实行下往而没偶然间限定。而假如你做不到这一点,也就是说你的PHP-CGI大概呈现某个BUG,大概你的宽带不敷充分,大概其他的缘故原由招致你的PHP-CGI可以假逝世,那末,就倡议你给”request_terminate_timeout”赋一个值,这个值能够依据你服务器的功能举行设定。一样平常来讲功能越好你能够设置越高。

”max_children”这个值又是怎样盘算出来的呢?这个值准绳上是越年夜越好,php-cgi的历程多了就会处置的很快,列队的哀求就会很少。设置”max_children”也必要依据服务器的功能举行设定,假如每个php-cgi所泯灭的内存在20M摆布,”max_children”设置成80,20M*80=1600M也就是说在峰值的时分一切PHP-CGI所耗内存在1600M之内,低于无效内存便可。

而假如”max_children”设置的较小,好比5-10个,那末php-cgi就会”很累”,处置速率也很慢,守候的工夫也较长。假如长工夫没有失掉处置的哀求就会呈现504GatewayTime-out这个毛病,而正在处置的”很累”的那几个php-cgi假如碰到了成绩就会呈现502Badgateway这个毛病。

上面是更具体的先容材料:

一些运转在Nginx上的网站偶然候会呈现“502BadGateway”毛病,有些时分乃至频仍的呈现。以下是小编汇集收拾的一些Nginx502毛病的排查办法,供参考:

  Nginx502毛病的缘故原由对照多,是由于在代办署理形式下后端服务器呈现成绩引发的。这些毛病一样平常都不是nginx自己的成绩,必定要从后端找缘故原由!但nginx把这些堕落都揽在本人身上了,实在让nginx的推行者备受置疑,究竟从字眼上了解,badgateway?不就是badnginx吗?让不懂得的人看到,会间接把义务推在nginx身上,但愿nginx下一个版本会把堕落提醒写略微友爱一些,最少不会是如今复杂的一句502BadGateway,别的还不忘附上本人的台甫。

Nginx502的触发前提

  502毛病最一般的呈现情形就是后端主机当机。在upstream设置里有这么一项设置:proxy_next_upstream,这个设置指定了nginx在从一个后端主机取数据碰到何种毛病时会转到下一个后端主机,外头写上的就是会呈现502的一切情形拉,默许是errortimeout。error就是当机、断线之类的,timeout就是读取梗塞超时,对照简单了解。我通常为全写上的:
.代码以下:

proxy_next_upstreamerrortimeoutinvalid_headerhttp_500http_503; 


 不外如今大概我要往失落http_500这一项了,http_500指定后端前往500毛病时会转一个主机,后真个jsp堕落的话,原本会打印一堆stacktrace的毛病信息,如今被502代替了。但公司的程序员可不这么以为,他们认定是nginx呈现了毛病,我其实没空跟他们注释502的道理了……

503毛病就能够保存,由于后端一般是apacheresin,假如apache逝世机就是error,但resin逝世机,仅仅是503,以是仍是有需要保存的。

办理举措

碰到502成绩,能够优先思索依照以下两个步骤往办理。

1、检察以后的PHPFastCGI历程数是不是够用:
.代码以下:

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


假如实践利用的“FastCGI历程数”靠近预设的“FastCGI历程数”,那末,申明“FastCGI历程数”不敷用,必要增年夜。

2、部分PHP程序的实行工夫凌驾了Nginx的守候工夫,能够得当增添nginx.conf设置文件中FastCGI的timeout工夫,比方:
.代码以下:

http{
fastcgi_connect_timeout300;
fastcgi_send_timeout300;
fastcgi_read_timeout300;
......
}
......


php.ini中memory_limit设低了会堕落,修正了php.ini的memory_limit为64M,重启nginx,发明好了,本来是PHP的内存不敷了。

  假如如许修正了还办理不了成绩,能够参考上面这些计划:

1、max-children和max-requests

  一台服务器上运转着nginxphp(fpm)xcache,会见量日均300Wpv摆布。

  比来常常会呈现如许的情形:php页面翻开很慢,cpu利用率俄然降至很低,体系负载俄然升至很高,检察网卡的流量,也会发明俄然降到了很低。这类情形只延续数秒钟就恢复了。

  反省php-fpm的日记文件发明了一些线索。
.代码以下:

Sep3008:32:23.289973[NOTICE]fpm_unix_init_main(),line271:getrlimit(nofile):max:51200,cur:51200Sep3008:32:23.290212[NOTICE]fpm_sockets_init_main(),line371:usinginheritedsocketfd=10,“127.0.0.1:9000″Sep3008:32:23.290342[NOTICE]fpm_event_init_main(),line109:libevent:usingepollSep3008:32:23.296426[NOTICE]fpm_init(),line47:fpmisrunning,pid30587


在这几句的后面,是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。

2、增添缓冲区容量巨细

  将nginx的errorlog翻开,发明“pstreamsenttoobigheaderwhilereadingresponseheaderfromupstream”如许的毛病提醒。查阅了一下材料,粗心是nginx缓冲区有一个bug酿成的,我们网站的页面损耗占用缓冲区大概过年夜。参考老外写的修改举措增添了缓冲区容量巨细设置,502成绩完全办理。厥后体系办理员又对参数做了调剂只保存了2个设置参数:clientheadbuffer,fastcgibuffersize。

3、request_terminate_timeout

  假如次要是在一些post大概数据库操纵的时分呈现502这类情形,而不是在静态页面操纵中罕见,那末能够检察一下php-fpm.conf设置中的一项:

request_terminate_timeout

这个值是max_execution_time,就是fast-cgi的实行剧本工夫。

0s

0s为封闭,就是无穷实行下往。(事先装的时分没细心看就改了一个数字)成绩办理了,实行很长工夫也不会堕落了。优化fastcgi中,还能够改改这个值5s看看效果。

php-cgi历程数不敷用、php实行工夫长、大概是php-cgi历程逝世失落,城市呈现502毛病。
功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间。
老尸 该用户已被删除
沙发
发表于 2015-1-17 17:22:53 | 只看该作者
现在的linux操作系统如redhat,难点,红旗等,都是用这么一个内核,加上其它的用程序(包括X)构成的。
山那边是海 该用户已被删除
板凳
发表于 2015-1-21 06:42:09 | 只看该作者
尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助.
谁可相欹 该用户已被删除
地板
发表于 2015-1-30 10:00:26 | 只看该作者
这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。?
灵魂腐蚀 该用户已被删除
5#
发表于 2015-2-6 09:48:29 | 只看该作者
为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。
admin 该用户已被删除
6#
发表于 2015-2-15 22:27:14 | 只看该作者
期间我阅读了不少关于Linux的相关资料,其中也不乏一些有趣的小故事,这既丰富了我的课余生活,也让我加深了对一些术语的理解,比玩游戏强多了。?
因胸联盟 该用户已被删除
7#
发表于 2015-3-4 16:30:35 | 只看该作者
首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。
变相怪杰 该用户已被删除
8#
发表于 2015-3-11 20:29:01 | 只看该作者
有疑问前,知识学习前,先用搜索。
小女巫 该用户已被删除
9#
发表于 2015-3-19 12:20:02 | 只看该作者
有疑问前,知识学习前,先用搜索。
若相依 该用户已被删除
10#
发表于 2015-3-28 04:19:26 | 只看该作者
即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-5 16:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表