来看看:Nginx 502 bad gateway和Nginx 504 Gateway Time-out毛病办理办法 毛病办理举措 ...
如果你学不好的话,你在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.289973fpm_unix_init_main(),line271:getrlimit(nofile):max:51200,cur:51200Sep3008:32:23.290212fpm_sockets_init_main(),line371:usinginheritedsocketfd=10,“127.0.0.1:9000″Sep3008:32:23.290342fpm_event_init_main(),line109:libevent:usingepollSep3008:32:23.296426fpm_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命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间。 现在的linux操作系统如redhat,难点,红旗等,都是用这么一个内核,加上其它的用程序(包括X)构成的。 尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助. 这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。? 为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。 期间我阅读了不少关于Linux的相关资料,其中也不乏一些有趣的小故事,这既丰富了我的课余生活,也让我加深了对一些术语的理解,比玩游戏强多了。? 首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。 有疑问前,知识学习前,先用搜索。 有疑问前,知识学习前,先用搜索。 即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。
页:
[1]