【问题标题】:PHP-FPM - Limit execution time, graceful stopPHP-FPM - 限制执行时间,优雅停止
【发布时间】: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 调用似乎不是一个好主意。

【问题讨论】:

    标签: php execution


    【解决方案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 不受系统调用(如sleepcurl_exec、SQL 查询等)的影响,所以对我来说是不够的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多