|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull Requests
Pull requests:
HistoryAllCommentsChangesGit/SVN commits
[2019-08-28 04:56 UTC] turchanov at farpost dot com
[2019-09-30 10:55 UTC] nikic@php.net
[2019-09-30 10:55 UTC] nikic@php.net
-Status: Open
+Status: Closed
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 18:00:01 2025 UTC |
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