Spyke
php·PHPbynettie

PHP-FPM and too many requests

I noticed that if you have too few pm_children set then some requests hang until timeout. This surprised me - I'd expect an immediate error, but it's more like a tarpit! For ages I was thinking my server was not performant, then I noticed via top that it wasn't doing or waiting while the browser was.

I have two questions:

  1. If you have pm_max_children=1 and you occupy that and submit another request, what actually happens? (I'm proxying through nginx.) HTTP doesn't have a "40_ Come back later".

  2. (if life deals you lemons...) if you can generate a tarpit that doesn't use server resources, this could be quite useful to know about too!

View original on lemmy.world
lemmy.max-p.me

FPM uses a request queue, so when all workers are busy they wait in line until a worker frees up to process it. With just 1 worker, this can take a long time to catch up, but with a reasonable number of workers you'll only wait a few seconds or even milliseconds depending on the app and how fast it can process requests.

The setting for that is listen.backlog which defaults to 511 on Linux.

3
nettiereply
lemmy.world

Right Thanks. So I think php might queue then forget some requests, because I've had this behaviour without too much traffic. I just don't know how to reproduce it, but maybe I'll try with that listen backlog setting, thanks for tip.

1

It doesn't forget requests, but NGINX will drop them after it times out if it takes too long.

2

You reached the end

PHP-FPM and too many requests | Spyke