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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
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

Pull Requests

Pull requests:

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: Sun Dec 22 05:01:30 2024 UTC