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!

  • Max-P
    link
    fedilink
    32 days ago

    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.

    • @nettieOP
      link
      English
      12 days ago

      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.

      • Max-P
        link
        fedilink
        22 days ago

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