Bug #79928 [Asn->Fbk]: fastcgi_finish_request() doesn't finish request
| From: | bukka@php.net | Date: | Mon, 28 Dec 2020 20:00:18 +0000 |
| Subject: | Bug #79928 [Asn->Fbk]: fastcgi_finish_request() doesn't finish request | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-231279@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=79928&edit=1
ID: 79928
Updated by: bukka@php.net
Reported by: vedad at kajtaz dot net
Summary: fastcgi_finish_request() doesn't finish request
-Status: Assigned
+Status: Feedback
Type: Bug
Package: FPM related
Operating System: FreeBSD 12.1-RELEASE
PHP Version: 7.4.8
Assigned To: bukka
Block user comment: N
Private report: N
Previous Comments:
------------------------------------------------------------------------
[2020-12-28 20:00:10] bukka@php.net
It's a bit late reply but you might want to read the comment in https://www.php.net/manual/en/function.fastcgi-finish-request.php
which explains what can potentially happen. I would probably first check fpm status or even better
set some monitoring to see how busy the children are and if you are using pm.max_children. Basically
the timeout can happen if all children are overloaded with the lengthy tasks.
Please update this bug if you notice something that you think doesn't look right in FPM.
------------------------------------------------------------------------
[2020-08-04 13:47:09] vedad at kajtaz dot net
Description:
------------
Hi,
I have a FPM (unix socket) + nginx setup.
I have a couple of scripts, invoked from cron through nginx, that are designed to run lengthy tasks.
The very first thing these scripts do is to invoke fastcgi_finish_request() (after going through
some routing logic).
They don't produce any output, neither before nor after invoking fastcgi_finish_request(). I
did try writing to stdout and/or seanding headers before the call, the behavior remains the same.
Seldomly (roughly one request out of 10), FPM doesn't seem to notify nginx, which results in
nginx reporting a timeout (which is configured to 30 seconds):
2020/08/03 18:38:33 [error] 82940#103032: *41412 upstream timed out (60: Operation timed out) while
reading response header from upstream, client: XX.XXX.XXX.XXX, server: XXXXXXXXX.XXXXXXXXXX.com,
request: "GET /cron/XXXXXXXXXX HTTP/1.1", upstream:
"fastcgi://unix:/tmp/XXXXXXXXX.sock", host: "XXXXXXXXX.XXXXXXXXXX.com"
Even when the 30 seconds timeout is not reached, I see instances of scripts running for more that a
couple of milliseconds one would except when fastcgi_finish_request() is invoked straight away
(first column = response time in seconds):
0.001 XX.XXX.XXX.XXX - - [04/Aug/2020:14:34:17 +0200] "GET /cron/XXXXXXXXXX HTTP/1.1" 200
5 "-" "cron"
17.253 XX.XXX.XXX.XXX - - [04/Aug/2020:14:34:17 +0200] "GET /cron/XXXXXXXXXX HTTP/1.1"
200 5 "-" "cron"
I have no idea where to start to try debugging this issue.
Any ideas?
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=79928&edit=1