Default PHP-FPM pools are conservative. On a busy WordPress or Laravel site they become the bottleneck long before CPU is fully used. A few settings, changed carefully, often produce a visible improvement.
The ones that matter most
- pm and pm.max_children: Too low and requests queue; too high and you swap or OOM. Size from available RAM and average process size, not from a generic blog post.
- pm.max_requests: Recycling workers prevents slow memory leaks from becoming an outage.
- OPcache memory and interned strings: Under-sized OPcache shows up as repeated compilation work. This is still one of the highest-leverage changes on PHP sites.
- Request timeouts: Align with the real needs of the application so long-running admin tasks do not pile up behind public traffic.
How to change them safely
Measure first (slow log, status page, or APM). Change one variable at a time. Watch memory and error rates after each change. On shared hosting many of these are controlled by the host; on a VPS they are yours.
Tuning PHP-FPM does not replace caching, a clean database, or a sensible plugin list. It removes an artificial ceiling so the rest of the stack can do its job.
Written at the desk
ChadBe the first to weigh in.