
PHP-FPM, or FastCGI Process Manager, is a service commonly used to run PHP applications behind a web server such as Nginx or Apache. It manages pools of PHP worker processes that execute application requests. When a website becomes slow under load, PHP-FPM worker capacity and queueing can be part of the explanation.
Understanding the request flow helps distinguish a worker shortage from slow application code or an overloaded database.
A browser connects to the web server. For a PHP-backed URL, the web server passes the request to a configured PHP-FPM pool, often over a Unix socket or TCP connection. A worker executes the PHP script and returns the response to the web server, which sends it to the client.
Static files such as images and CSS may be served directly without consuming a PHP worker. Dynamic pages, administrative actions, and many API requests do require PHP execution.
A PHP-FPM worker is a process that handles PHP requests. While it is busy processing a request, it generally cannot handle another request at the same time. If all workers are occupied, additional requests may wait in a queue or encounter connection and timeout problems, depending on the surrounding configuration.
| Condition | Likely effect | What to inspect |
|---|---|---|
| Workers mostly idle | Worker count may not be the bottleneck | Network, cache, browser, and database timing |
| All workers busy | New dynamic requests may queue | Slow requests and pool status |
| Long-running PHP requests | Workers remain occupied longer | Application logs, external calls, SQL |
| Memory pressure | More workers can exhaust available RAM | Per-process memory and system capacity |
Increasing the maximum number of children can improve concurrency when the current pool is genuinely too small. But each worker consumes memory, and the application may also create database connections or perform CPU-intensive work. Setting a very high worker count can cause memory pressure, swapping, or contention that makes the entire server less responsive.
A safe pool size depends on available memory, average worker memory, other services on the server, and the request mix. Measure real workloads instead of copying a number from another server.
PHP-FPM commonly supports static, dynamic, and ondemand process management. Static keeps a configured number of workers available. Dynamic adjusts the number within configured bounds. Ondemand starts workers when requests arrive and can stop idle workers after a period. Each mode trades resource use against startup and burst behavior.
The appropriate mode depends on the workload and hosting environment. A small low-traffic site and a busy application server may have different needs.
Enable or inspect PHP-FPM status information only through a protected endpoint. Useful indicators may include active and idle processes, listen queue, maximum active processes, and slow requests. Do not expose a status page publicly because it can reveal operational details.
When a queue grows, investigate why workers are occupied. A slow database query, remote API call, large import, or plugin operation can hold a worker far longer than an ordinary page request. Increasing the pool may temporarily hide the queue while multiplying the number of slow operations hitting the database.
PHP-FPM can be configured to capture backtraces for requests that exceed a configured duration. This can help identify the code path associated with a slow request. The slow log should be secured, rotated, and enabled with a threshold that produces useful data without overwhelming the system.
On shared hosting, PHP-FPM pool settings may be managed by the provider and not exposed to the account owner. Users can still reduce unnecessary PHP work by enabling appropriate caching, keeping applications updated, limiting expensive scheduled jobs, and reviewing plugins. If the pool repeatedly reaches a provider-enforced limit, share timestamps and affected URLs with support.
PHP-FPM is a concurrency manager, not a magic speed switch. Worker capacity matters, but so does the time each request spends inside PHP. Use pool metrics and slow-request evidence to find the cause before changing worker limits.