一次nginx 504 Gateway Time-out错误排查、解决记录

2019-10-17 20:54:36丽君

就是说如果脚本中执行了其它操作的时间是不计在脚本运行时间当中的,如果你没设置超时,那么php就会一直等待调用的结果。

查看open.php源文件一看,果然没有设置curl的超时时间。

增加如下两行,重新刷新,后问题解决了。


curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); //timeout on connect
curl_setopt($ch, CURLOPT_TIMEOUT, 10); //timeout on response

当然,除了这种方法外,php-fpm里也提供参数供我们强制杀死长时间无结果的进程,只是该参数默认没打开。

php-fpm的配置文件里可以设置一个参数request_terminate_timeout,请求终止的超时时间,当请求执行超过这个时间就会被kill。

同时它还有个参数request_slowlog_timeout,用来记录慢请求日志的。

命令行运行php的话,可以使用这段代码


$real_execution_time_limit = 60; //时间限制

if (pcntl_fork())
{
// some long time code which should be
// terminated after $real_execution_time_limit seconds passed if it's not
// finished by that time
}
else
{
sleep($real_execution_time_limit);
posix_kill(posix_getppid(), SIGKILL);
}