PHP-FPM - 限制执行时间,优雅停止
Posted
技术标签:
【中文标题】PHP-FPM - 限制执行时间,优雅停止【英文标题】:PHP-FPM - Limit execution time, graceful stop 【发布时间】:2017-06-02 05:43:01 【问题描述】:因此,在我的应用程序中,我有一些第三方对 Web 服务的调用。
这些服务在高峰时间可能需要很长时间才能响应,这样才能达到我在 php-FPM 设置中为 request_terminate_timeout
定义的值。然后脚本被残酷地中止,我无法使用register_shutdown_function
来尝试清理请求。
是否有任何我不知道的 PHP/PHP-FPM 设置会限制请求的总执行时间?处理 PHP-FPM 终止的“优雅”方式?
max_execution_time
只考虑了在 PHP 中花费的时间,在我的情况下,这并不是脚本长时间运行的原因
对网络请求使用pcntl
调用似乎不是一个好主意。
【问题讨论】:
【参考方案1】:对于长轮询请求,我建议使用 cron/stack 方法。
问题,为什么它被停止可以解决你的 Apache/nginx 服务器:
proxy_connect_timeout 500;
proxy_send_timeout 500;
proxy_read_timeout 500;
此外,您可以使用它们的触发器来处理超时错误。
【讨论】:
我不想让请求变得更长。问题是我正在使用一些不可预测的服务,这些服务有时无法在合理的时间跨度内做出响应。这就是为什么我正在寻找一种在应用程序级别处理故障的方法,而不是试图减轻它们。 在这种情况下,我建议使用Flume
。通过使用它来跟踪此类错误相当简单。【参考方案2】:
尝试设置 max_execution_time 并捕获错误
<?php
function shutdown()
$a=error_get_last();
if($a==null)
echo "No errors";
else
gracefully_shutdown();
register_shutdown_function('shutdown');
ini_set('max_execution_time', 10 ); //set to 10 seconds
// do some works here
do_some_works();
?>
看看这个链接http://www.php.net/manual/en/function.set-error-handler.php#106061
【讨论】:
很遗憾,max_execution_time
不受系统调用(如sleep
、curl_exec
、SQL 查询等)的影响,所以对我来说是不够的。以上是关于PHP-FPM - 限制执行时间,优雅停止的主要内容,如果未能解决你的问题,请参考以下文章