仓酷云

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

[其他Linux] 来谈谈:一次nginx 504 Gateway Time-out毛病排查、办理纪录

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

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

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

x
系统做了些什么,这需要时间去掌握,(背命令不是一件好的学习方法,相信我你一定会在你背完之前全部忘光),尽量掌握常用命令;
记一次稀里糊涂的网站得到呼应排查。之前网站一向是利用nginx做代办署理后真个apache运转php来供应服务。apache常常会不按期不准时间的呈现不克不及服务得到呼应,然后nginx呈现"504GatewayTime-out"
检察毛病日记也看不就任何器材,觉得是apache的bug(实在不是,上面会说缘故原由)。
大概岁数年夜了人就不爱折腾,乐意坚持原状不动,利用监控工具,每次收到报警后都从头启动apache委曲保持着。终究有一天我烦了,不就是处置php吗,我不必apache总行了吧,一怒之下利用源安装php-fpm转移到php-fpm来运转php。安装php其实不贫苦,利用源安装仍是很顺遂的,独一必要做的就是设置phpworker事情历程的日记输入php毛病日记。

统统筹办停当后把本来的proxy_pass换成fastcgipass就能够了。
.代码以下:

upstreamapachephp{
serverwww.ckuyun.com:8080;#Apache1
}
....
proxy_passhttp://apachephp;

交换成成
.代码以下:

upstreamphp{
server127.0.0.1:9000;
}
...
fastcgi_passphp;

就能够把apache上跑的php迁徙到php-fpm下去跑。
原觉得如许就能够万事大吉了,迁徙完成是也的确没甚么成绩,可是假如你不往剖析成绩的基本缘故原由在哪。成绩仍是会找上门来,第二天nginx又报了504的gatewaytimeout。这回没apache甚么事了吧,apache总算抛清了干系。
那应当仍是在nginx和php-fpm身上,检察nginx的毛病日记,能够看到
.代码以下:

[error]6695#0:*168438upstreamtimedout(110:Connectiontimedout)whilereadingresponseheaderfromupstream,
...
request:"GET/kd/open.php?company=chinapost&number=PA24977020344HTTP/1.1",upstream:"fastcgi://127.0.0.1:9000",host:"www.ckuyun.com"

看到这里基础上就扫除了nginx怀疑,nginx是在守候php处置"GET/kd/open.php?company=chinapost&number=PA24977020344HTTP/1.1"超时加入了。
即刻重启php-fpm,成绩没有了,网站能够会见了。
再次会见该页面,仍然没有呼应,但同时会见其余页面一般,该页面革新几回后,全部网站都是badgatewaytimeout了。
成绩就减少到这个php剧本上了。
.代码以下:

netstat-napo|grep"php5-fpm"|wc-l

检察php事情历程已到达了设置文件里的下限10,有种感到就是人人都被open.php这个剧本卡住了。
这个剧本是干甚么的呢?这个剧本就是收罗快递信息的,内里用到了php_curl。
PHP剧本假如实行工夫凌驾php.ini中的设置项max_execution_time不出了局就会强迫加入。
检察了php.ini中max_execution_time的确配了,值为30。
全能google派上用处了,经由不休google后失掉上面这句话
set_time_limit()函数和设置指令max_execution_time只影响剧本自己实行的工夫。任何产生在诸如利用system()的体系挪用,流操纵,数据库操纵等的剧本实行的最年夜工夫不包含个中,当该剧本已运转。
就是说假如剧本中实行了别的操纵的工夫是不计在剧本运转工夫傍边的,假如你没设置超时,那末php就会一向守候挪用的了局。
检察open.php源文件一看,公然没有设置curl的超不时间。
增添以下两行,从头革新,后成绩办理了。
.代码以下:

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);//timeoutonconnect
curl_setopt($ch,CURLOPT_TIMEOUT,10);//timeoutonresponse


固然,除这类办法外,php-fpm里也供应参数供我们强迫杀逝世长工夫无了局的历程,只是该参数默许没翻开。
php-fpm的设置文件里能够设置一个参数request_terminate_timeout,哀求停止的超不时间,当哀求实行凌驾这个工夫就会被kill。
同时它另有个参数request_slowlog_timeout,用来纪录慢哀求日记的。
命令交运行php的话,可使用这段代码
.代码以下:

$real_execution_time_limit=60;//工夫限定
if(pcntl_fork())
{
//somelongtimecodewhichshouldbe
//terminatedafter$real_execution_time_limitsecondspassedifitsnot
//finishedbythattime
}
else
{
sleep($real_execution_time_limit);
posix_kill(posix_getppid(),SIGKILL);
}



学习python,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。
小女巫 该用户已被删除
沙发
发表于 2015-1-18 17:02:31 | 只看该作者
不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。
再见西城 该用户已被删除
板凳
发表于 2015-1-23 18:31:12 | 只看该作者
主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-1-31 19:04:28 | 只看该作者
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
深爱那片海 该用户已被删除
5#
发表于 2015-2-6 22:22:20 | 只看该作者
目前全球有超过一百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,RedhatLinux和DebianLinux是网络管理员的理想选择。
因胸联盟 该用户已被删除
6#
发表于 2015-2-19 03:52:56 | 只看该作者
如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。
只想知道 该用户已被删除
7#
发表于 2015-3-6 12:44:13 | 只看该作者
Linux的成功就在于用最少的资源最短的时间实现了所有功能,这也是符合人类进化的,相信以后节能问题会日益突出。
透明 该用户已被删除
8#
发表于 2015-3-13 01:12:38 | 只看该作者
随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。
再现理想 该用户已被删除
9#
发表于 2015-3-20 09:33:26 | 只看该作者
应对Linux的发展历史和特点有所了解,Linux是抢占式多任务多用户操作系统,Linux最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-26 17:35

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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