|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。 |
|