php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #78413 request_terminate_timeout does not take effect after fastcgi_finish_request
Submitted: 2019-08-14 00:32 UTC Modified: -
Votes:1
Avg. Score:4.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: rs dot orlov at gmail dot com Assigned:
Status: Closed Package: FPM related
PHP Version: Irrelevant OS:
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: rs dot orlov at gmail dot com
New email:
PHP Version: OS:

 

 [2019-08-14 00:32 UTC] rs dot orlov at gmail dot com
Description:
------------
Hi there.

It is common practice to call fastcgi_finish_request as soon as response is ready to be sent and defer some heavy load tasks after that. But here is the problem: process will no longer be terminated if it exceeds request_terminate_timeout.

It happens because fpm_request_finished called inside fastcgi_finish_request changes request state to FPM_REQUEST_FINISHED. But fpm_request_check_timed_out only checks processes being in state between FPM_REQUEST_ACCEPTING and FPM_REQUEST_END.

Turns out that there is no way to limit execution time of a worker after fastcgi_finish_request. That behavior may lead to all fpm-pool being occupied.

Possible solution may be a config option which enables fpm_request_check_timed_out for processes in FPM_REQUEST_FINISHED state,

Test script:
---------------
<?php

fastcgi_finish_request();

$time = microtime(true);
// must be any time greater than configured request_terminate_timeout
$delaySec = 10;

while ($delaySec > (microtime(true) - $time)) {
	usleep(100000);
}


Expected result:
----------------
Php worker being terminated by fpm after %request_terminate_timeout% of execution time


Patches

Add a Patch

Pull Requests

Pull requests:

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-08-28 04:56 UTC] turchanov at farpost dot com
The following pull request has been associated:

Patch Name: Fix #78413: php-fpm request_terminate_timeout does not take effect af…
On GitHub:  https://github.com/php/php-src/pull/4637
Patch:      https://github.com/php/php-src/pull/4637.patch
 [2019-09-30 10:55 UTC] nikic@php.net
Automatic comment on behalf of turchanov@farpost.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=e546d721e8c61fb1218335dc75b1874033c3ca24
Log: Fix #78413: php-fpm request_terminate_timeout does not take effect after fastcgi_finish_request
 [2019-09-30 10:55 UTC] nikic@php.net
-Status: Open +Status: Closed
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Wed Apr 24 12:01:29 2024 UTC